赞
踩
一个描述得比较好的示意图:
在一些涉及到批量处理二维列表中数据的场景中,使用dataframe会简便很多。
而只有一维数据的dataframe就是series啦。
感觉dataframe用的多一些,就先记录dataframe吧。
官网:https://pandas.pydata.org/pandas-docs/stable/index.html
import pandas as pd
空dataframe
# 创建空dataframe
>>> df = pd.DataFrame()
>>> df
Empty DataFrame
Columns: []
Index: []
用字典创建dataframe
# 用字典创建dataframe >>> data = {'name':['apple','egg','watermelon'],'color':['red','yellow','green'],'num':[30,40,50]} # 1.直接创建 >>> df1 = pd.DataFrame(data) >>> df1 name color num 0 apple red 30 1 egg yellow 40 2 watermelon green 50 # 2. 自定义列顺序 >>> df2 = pd.DataFrame(data,columns=['name','num','color']) >>> df2 name num color 0 apple 30 red 1 egg 40 yellow 2 watermelon 50 green # 3. 自定义行索引名 # (给出列表) >>> df3 = pd.DataFrame(data,index=['No.1','No.2','No.3']) >>> df3 name color num No.1 apple red 30 No.2 egg yellow 40 No.3 watermelon green 50 # (使用range(start,end,interval)函数,生成的序列不包含end) >>> df3_1 = pd.DataFrame(data,index=range(0,6,2)) >>> df3_1 name color num 0 apple red 30 2 egg yellow 40 4 watermelon green 50 # 4. 列名数超过原数据则创建空列。(行索引不能超过行数) >>> df4 = pd.DataFrame(data,columns=['name','num','color','price']) >>> df4 name num color price 0 apple 30 red NaN 1 egg 40 yellow NaN 2 watermelon 50 green NaN
行
>>> df3._stat_axis.values.tolist()
['No.1', 'No.2', 'No.3']
列
# 方法1
>>> list(df3)
['name', 'color', 'num']
# 方法2
>>> df3.columns.values.tolist()
['name', 'color', 'num']
如果只使用.values得到的是ndarray
>>> df3.columns.values
array(['name', 'color', 'price', 'num'], dtype=object)
行
只能借助loc、iloc。
# loc >>> df3.loc[['No.1','No.3'],['name','color']] # '[]', 索引特定行列 name color No.1 apple red No.3 watermelon green >>> df3.loc['No.1':'No.3','name':'color'] # ':',切片 name color No.1 apple red No.2 egg yellow No.3 watermelon green # iloc >>> df3.iloc[1:] # 行切片,取第2行之后 name color num No.2 egg yellow 40 No.3 watermelon green 50 # 根据值查找行索引 >>>df3[df3['name']=='apple'].index No.1
列
可以直接根据列名。或者使用loc/iloc。
>>> df3['name'] No.1 apple No.2 egg No.3 watermelon Name: name, dtype: object >>> df3.loc[:,'name':'num'] name color num No.1 apple red 30 No.2 egg yellow 40 No.3 watermelon green 50 >>> df3.iloc[:,1] No.1 red No.2 yellow No.3 green Name: color, dtype: object
行+列
>>> df3.iloc[1:,-2:] # loc同理
color num
No.2 yellow 40
No.3 green 50
# 范围搜索
>>> df3[df3['num']>30] # num>30的所有行
name color num
No.2 egg yellow 40
No.3 watermelon green 50
>>> df3['name'][df3['num']>30] # num>30的所有行的'name'信息
No.2 egg
No.3 watermelon
Name: name, dtype: object
dataframe内的数据类型是series
# dataframe内的数据类型是series
>>> type(df3['name'])
<class 'pandas.core.series.Series'>
# 方法一: >>> df3['price'] = '' >>> df3 name color num price No.1 apple red 30 No.2 egg yellow 40 No.3 watermelon green 50 # 方法二 >>> df3['price'] = pd.Series(dtype='int',index=['No.1','No.2','No.3']) # 等价于 >>> df3['price'] = 0 >>> df3 name color num price No.1 apple red 30 0 No.2 egg yellow 40 0 No.3 watermelon green 50 0
注意:不能用空列表[]初始化。
对索引顺序没有要求,就直接添加更简单。直接添加默认加到最后
>>> df3['price']=[1,2,3]
>>> df3
name color num price
No.1 apple red 30 1
No.2 egg yellow 40 2
No.3 watermelon green 50 3
对索引顺序有要求的用Series添加。
注意:若使用Series初始化一定要指定index,因为它默认索引为0、1、2…,如果你的dataframe索引不是,就会全部初始化为NaN。
>>> df3['price']=pd.Series([1,2,3])
>>> df3
name color num price
No.1 apple red 30 NaN
No.2 egg yellow 40 NaN
No.3 watermelon green 50 NaN
>>> df3['price']=pd.Series([1,2,3],index=['No.2','No.1','No.3'])
>>> df3
name color num price
No.1 apple red 30 2
No.2 egg yellow 40 1
No.3 watermelon green 50 3
insert指定插入位置
>>> df3.insert(2,'price',[1,2,3])
>>> df3
name color price num
No.1 apple red 1 30
No.2 egg yellow 2 40
No.3 watermelon green 3 50
行
drop函数默认删除行。不会删除原数据,需要赋值给新变量。或者指定inplace=True。
>>> df3.drop('No.3')
name color num price
No.1 apple red 30 2
No.2 egg yellow 40 1
>>> df3
name color num price
No.1 apple red 30 2
No.2 egg yellow 40 1
No.3 watermelon green 50 3
列
del会直接在原数据中删除。
>>> del df3['price']
>>> df3
name color num
No.1 apple red 30
No.2 egg yellow 40
No.3 watermelon green 50
drop函数指定axis=1为删除列。inplace=True直接在原数据上执行操作。
>>> df3.drop('num', axis=1, inplace=True)
>>> df3
name color
No.1 apple red
No.2 egg yellow
No.3 watermelon green
read_csv() 参数:
df = pd.read_csv('test.csv', na_values='NAN', parse_dates=['date'],infer_datetime_format=True)
read_excel() 参数:
df = pd.read_excel('test.xlsx', sheet_name='sheet1', na_values='n/a')
其它参考:https://pandas.pydata.org/pandas-docs/stable/user_guide/io.html
写入各种文件的方法可以参考这篇文章:
https://blog.csdn.net/tz_zs/article/details/81137998
df.to_excel(sheet_name='sheet1',startcol=0,index=False)
df.to_csv("test.csv", index=False)
查看前几行。
>>> df3.head() # 默认5行,可传入数值指定行数
调整print时dataframe显示行列数量。
#显示所有列
pd.set_option('display.max_columns', None) # None处也可以是想要的具体数值
#显示所有行
pd.set_option('display.max_rows', None)
#显示宽度无限长
pd.set_option('display.width', None)
先记录这么多,之后想起来再补充~
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。