Pandas 记录

过滤不为空的数据

df[df['PLANR']=='']

 

获取某列某行数据(某个单元格数据)

df['MNG02'][0]

 

根据判断条件筛选数据

df[df['DAT00'] < temp_time]

 

获取整列数据集合

tmp_df.get('DAT00').unique()

 

从原来的dataFrame中提取需要的列 组成新的dataFrame

dataFrame[['col1','col2','col3']]

 

dataFrame进行分组

dataFrame.groupby(['col1','col2','col3']).sum()

 

重置索引

df.reset_index()

 

 

创建新DataFrame
新建一个字典,key作为列名
data = {'Name': ['mark', 'jack', 'james', 'kobe', 'alias'], 'Age': [13, 13, 14, 15, 16],
'Sex': ['F', 'F', 'M', 'M', 'M'],
'Job': ['wait', 'eat', 'computor', 'drink', 'sleep']}
pd.DataFrame(data)

df['columnName'] 类型Serials
df[['columnName']] 类型DataFrame
df.shape (行数,列数)


添加新列
1.df['columnName'] = value
2.df.insert(columnIndex, 'columnName', 'value')

设置索引
df.set_index('columnName')

根据索引获取需要的行数据(没有索引获取不到)
df.loc['indexName'] type:Serials
df.loc[['indexName1','indexName2','indexName3']] type:DataFrame

根据行数获取需要的行数据
df.iloc['rowNumber'] type:Serials
df.iloc[['rowNumber1','rowNumber2','rowNumber3']] type:DataFrame

获取指定的行数和列数
df.iloc[:3, :4] 选取前3行和前4列
df.iloc[:, [4,6]] 选取两列的所有的行
df.iloc[[100, 200], [7, 15]] 选取不连续的行和列
df.loc[:, ['columnName1', 'columnName2']] loc实现同上功能

获取df中指定的数据值
df.iloc['rowNumber','colNumber']
df.loc['indexName','columnName']

根据列名从原始数据集中抽取需要的数据,结果集(行数不变,列数减少)
df[['columnName1','columnName2','columnName3']]

根据bool值进行数据提取,条件必须是bool类型数组,并且数组的大小与行数一致
df[[True,True,False]] :获取前2行
df[df['Age'] == 12] :获取Age为12的行数据
df[(df['Age'] == 12) & (df['Name'] = 'jack')] :根据多个条件获取数据,括号必须,因为&运算符高于逻辑运算符

根据指定列进行排序
df.sort_values('columnName', ascending=False) ascending=False 降序 默认升序

数据去重
df.drop_duplicates(subset='columnName') subset:指定根据某列中的数据去重,默认采用全部数据列
"""

"""
Serials操作
ss = df['columnName'] 获取df中某一列,返回Serials

获取第几个值
ss.iloc['int']
ss['int']

获取多个值
ss.iloc[['int1','int2','int3']]
ss[['int1','int2','int3']]

loc只接收行索引标签(没有索引获取不到数据)
ss.loc['indexName']

修改列名
df.rename(columns={'oldColumnName':'newColumnName'})
df.columns = ['newColumnName1', 'newColumnName2', 'newColumnName3']

分组、聚合的多种方式
df.groupby(['columnName1','columnName2','columnName3']).sum()
df.groupby(['columnName1','columnName2']).agg({'columnName3':['f1','f2'],'columnName4:[f3,f4]'}) :通过2个字段进行分组后,指定columnName3和columnName4进行2种不同聚合函数的计算
df.groupby(['columnName1'])['columnName2','columnName3'].agg(['f1','f2']) 通过一个字段进行分组,指定2个字段进行指定的聚合函数计算

unstack('indexNumber') 行转列 参数 索引的level 比如 第一列索引输入0,第二列索引输入1,若只有2个索引,输入了2,异常,必须是索引列
unstack('indexName')

stack('indexNumber') 列转行
stack('indexName') 列转行

pandas合并
数据直接合并,没有任何删减
pd1.concat(pd2)

4. concat, join, 和merge的区别
concat :
Pandas函数
可以垂直和水平地连接两个或多个pandas对象(唯一一个可以垂直合并的函数,append内部采用的也是concat函数)
只用索引对齐
索引出现重复值时会报错
默认是外连接(也可以设为内连接)
join :
DataFrame方法
只能水平连接两个或多个pandas对象
对齐是靠被调用的DataFrame的列索引或行索引和另一个对象的行索引(不能
是列索引)
通过笛卡尔积处理重复的索引值
默认是左连接(也可以设为内连接、外连接和右连接)
merge :
DataFrame方法
只能水平连接两个DataFrame对象
对齐是靠被调用的DataFrame的列或行索引和另一个DataFrame的列或行索引
通过笛卡尔积处理重复的索引值
默认是内连接(也可以设为左连接、外连接、右连接)


pandas从数据库获取数据后,会将数据加载到内存,,差不多1g内存100w行数据
pandas到处数据至csv、hdf5,100w行/200M

------------------------------------------------------------------------------------
vaex
vaex的hdf5坑:vaex只支持自身保持的hdf5格式,所以需要使用vaex的hdf5功能,步骤如下:
1.先利用pandas获取需要的dataFrame
2.使用v1=vaex.from_pandas(dataFrame) 将dataFrame转换成vaex支持的dataFrame
3.将获取的数据集导出成vaex本身支持的hdf5 v1.export_hdf5('store.h5')
以上步骤就已经有了vaex本身支持的hdf5文件了,可以大胆的使用vaex来进行快速的数据分析了
加载
df = vaex.open('store.h5') vaex的操作基本都是毫秒级
df的过滤操作
cl_order[(cl_order.ITEM == '1160XW717') & (cl_order.CLOSE_TIME < np.datetime64(datetime(2019,10,2))) & (cl_order.CLOSE_TIME>=np.datetime64(datetime(2019,10,1)))]
vaex如果数据量大,那么在进行groupby的时候,几乎就不会动了

datetime64[ns]转datetime 需要先转到datetime64[s] np.datetime64(x,'s').item().hour x为datetime64[ns]对象,item()后为datetime对象



 

posted @ 2019-10-15 16:47  初次的告白  阅读(637)  评论(0编辑  收藏  举报