python pandas篇

  • Post author:
  • Post category:python


  • pandas中如何提取DataFrame的某些列,组成新的df:
df=df[['course2','fruit']]
#使用列1填补列2的缺失值
df_new=df[2].fillna(df[0])

#fillna默认会返回新对象,但也可以对现有对象进行就地修改:
df.fillna(0, inplace = True)
  • pandas 删除一列或多列:
#axis=1表示选择的是列,axis=0选择的是行

#删除一列
 df_ty=df_ty.drop(['type'],axis=1)

#删除多列
 df_ty=df_ty.drop(['type','stype'],axis=1)
  • pandas 某列为空,则删除行:
#某列为空则删除行(默认,subset里,其中一个字段为空,就删除该行)
df_ty=df_ty.dropna(subset=['dimension', 'type_code', 'type_name', 'stype_code', 'stype_name'])
  • dataframe列的重命名:
df.rename(columns = {"old_name": "new_name"}
#left	左表,合并对象,DataFrame或Series
#right	右表,合并对象,DataFrame或Series
#how	合并方式,可以是left(左合并), right(右合并), outer(外合并), inner(内合并)
#on	基准列 的列名
#left_on	左表基准列列名
#right_on	右表基准列列名
#left_index	左列是否以index为基准,默认False,否
#right_index	右列是否以index为基准,默认False,否

pd.merge(left, right, how='left', on=['key1', 'key2'])
sort_values(by, axis=0, ascending=True, inplace=False, kind=‘quicksort’, na_position=‘last’)

①axis 如果axis=0,那么by=“列名”; 如果axis=1,那么by=“行名”;
②ascending: True则升序,可以是[True,False],即第一字段升序,第二个降序
③inplace: 是否用排序后的数据框替换现有的数据框 ,True,或者False
④kind: 排序方法
⑤na_position : {‘first’, ‘last’}, default ‘last’,默认缺失值排在最后面
  • dataframe筛选:
df = df[df['person_id']=='testid1234']
  • 筛选后定位:
gender=df['gender'].iloc[0]
因为筛选后,index不是0了,所以要加个iloc[0]来定位。
df['gender'][0] 定位不到。
  • 涉及axis
lambda和dropna默认都是axis=0lambda的axis=1是行操作,dropna的axis=0是行操作。
#每行进行func处理
df.apply(lambda x: test_func(x),axis=1)
#按行进行去空
df=df.dropna()

axis=1表示选择的是列,axis=0选择的是行
#删除一列
 df_ty=df_ty.drop(['type'],axis=1)
#删除多列
 df_ty=df_ty.drop(['type','stype'],axis=1)
  • dataframe筛选案例:
df_w_cal= df_w[df_w['statistic_date']>=dt.datetime.strptime(min_statistic_date,"%Y-%m-%d").date()]
去除指定单列或多列中的完全重复的项通过drop_duplicates()函数实现,需要利用Pandas包。
其中:
1、subset=[] 表示整个dataframe基于[]内选定列进行数据重复内容识别,可以添加多列数据进行识别。
(1)添加一列列名时表示对选中的单列数据进行重复数据识别,
(2)添加多列时则表示识别多列数据同时重复的情况;
2、keep='' 表示对选中的重复数据操作策略,可选择的参数为'first''last''False'三种。
(1'first'表示在识别的重复项中保留按照索引顺序的第一个内容,其余删除,
(2'last'表示在识别的重复项中保留按照索引顺序的最后一个内容,其余删除,
(3'False'表示删除所有重复项;
3、inplace= 表示对处理好的dataframe存储策略,可选择参数为FalseTrue1False表示不对原始数据进行去重工作,例如示例代码中data1内容不改变,将处理结果赋予data参数中,
(2True表示去重工作直接在原始数据中进行操作,例如示例代码中data1中去重操作会直接在data1中进行,data不会被赋值。
data = data1.drop_duplicates(subset=['列名1','列名2'], keep='first', inplace= False)
  • dataframe交换两列数据
# 交换df两列数据
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]} )
print(df)
   A  B   C
0  1  4   7
1  2  5   8
2  3  6   9
df[['A', 'B']] = df[['B', 'A']]
print(df)
   A  B  C
0  4  1  7
1  5  2  8
2  6  3  9
date_range时间序列--时间切片
pd.date_range(start='20220101', periods=10, freq='M')
#输出
DatetimeIndex(['2022-01-31', '2022-02-28', '2022-03-31', '2022-04-30',
'2022-05-31', '2022-06-30', '2022-07-31', '2022-08-31',
'2022-09-30', '2022-10-31'],
dtype='datetime64[ns]', freq='M'
  • 使用BytesIO对象,声明流为bytes类型:read_excel报错(

    参考1



    参考2

使用BytesIO对象,声明流为bytes类型:read_excel报错:
must explicitly set engine if not passing in buffer or path for io。

res = requests.get(url)
BytesIO = pd.io.common.BytesIO
df = pd.read_excel(BytesIO(result.content))

可以使用外部的变量进行筛选
#查询温度在这两个温度之间的数据
high_temperature = 15
low_temperature = 13
df.query("temperature<=@high_temperature & temperature>=@low_temperature").head()
  • dict字典转为dataframe格式(index=[0]这个要加上):
data = {"index_id": response.meta['index_id'], "index_name": response.meta['index_name'],"statistic_date": response.meta['statistic_date']}  
df=pd.DataFrame(data, index=[0])
  • pandas匹配找特定值index
index = trade_date[trade_date == '2023-06-30'].index[0]
  • pd.concat可以合并df列表为一个df
df = pd.concat(df_list, ignore_index=True)



版权声明:本文为qq_44821149原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。