pandas操作集合

1.shift():把整列数据右移一列(axis=1)或者整个数据表下移一行(参数为axis=0),默认是axis = 0

2.drop_duplicates(),去除重复项,它有3个参数,其中subset用来指定特定的列,默认是所有列,详细的解释在这

3.cumsum():连续和,详细见下面的例子和官方文档

>>> s = pd.Series([2, np.nan, 5, -1, 0])
>>> s
0    2.0
1    NaN
2    5.0
3   -1.0
4    0.0
dtype: float64

>>> s.cumsum()
0    2.0
1    NaN
2    7.0
3    6.0
4    6.0
dtype: float64

4.unstack():请参考这篇文章
简单来说,stack()就是把行索引转成列索引,unstack()就是把列索引转成行索引,如下:

df = pd.DataFrame(np.random.random(size=(5,2)))
print(df)
print("unstack")
print(df.unstack())
print("stack")
df.stack()

运行:
在这里插入图片描述

5.读取csv文件:
df=pd.read_csv(‘file_path’,sep=’,’)

6.用read_csv读取文件时出现OSError:Initializing from file failed和UnicodeDecodeError问题:
参考自:https://blog.csdn.net/ArcheriesYe/article/details/77992412
前者的错误原因是读取了名字中含中文的文件,后者的原因是读取了含中文的文件。
具体原理就是pandas调用read_csv方法时,默认使用Cengine作为parser engine。当文件名中含有中文时,用默认的C engine就会出错。在参数中设置engine ='python'可以解决上面这两个问题

7.删除含有空列值的行:df2=df.dropna()
这个函数有个参数是inplace,如果取True表示在原数据上进行更改,取False表示拷贝原数据,在拷贝后的数据上进行更改

8.删除有重复值的行:
1)参考自Python去掉或保留数据集中的重复行

2)用drop_duplicates(subset=XXX,keep=XXX)
其中subset这个参数默认None是指所有列,也可以自定义为其中一部分列变量名,比如subset=[‘A’,‘B’];
keep这个参数默认为’first’,即保留重复行的第一行;取’last’表示保留最后一行,取False不保留任何一行重复行
比如:

df3=df2.drop_duplicates(subset=['latitude','longitude'],keep='first')

9.获取行/列:
1)按索引获取列

df.iloc[:,a:b]# 这样可以获取列索引为a~b-1的列
df.iloc[:,a]# 这样可以获取列索引为a的列

示例如下(这个示例只获取了一列):
在这里插入图片描述
2)按列名获取列
3)按索引获取行
4)按行列序号获取值:df.iat[row_index,column_index]

10.pandas报错module 'pandas' has no attribute 'ewma'解决:
pandas.ewma(...)改成pandas.DataFrame.ewm(...).mean()

11.把dataframe转成Series:
目前我只查到了这样的转换方法:ts=pd.Series(df['列名'].values),但是我觉得这样还不如直接取dataframe的列值呢:ts=df[‘列名’]

12.统计同一列中各种值的个数:df['col_name'].value_counts(),效果如下:
在这里插入图片描述

13.计算特定列中特定列值的个数:
df[df['列名']==列值].count()[0]
比如我要统计verified_purchase这一列中值为N的个数,那代码和运行结果如下:
在这里插入图片描述
这里要注意一点,就是df[df['列名']==列值].count()实际上得到的是一个series,如下:
在这里插入图片描述
14.解决plt.savefig('img_dir')一片空白:原因就是我在调用了plt.show()后才调用plt.savefig(),解决办法就是先调用plt.savefig(),然后再调用plt.show()

15.选取含有特定列值的行:new_df=df[df['col_name'].isin([your value])]
比如我要选取verified_purchase列中值为Y的行,代码如下:
在这里插入图片描述
16.获取某列数值排在前n位的n行数据:
top_XX=df.nlargest(n,columns='col_name').tail(n).
参考自使用pandas实现SQL操作

17.对数据进行分组并求平均值
参考博客:Python Pandas实现数据分组求平均值并填充nan

# 只留下需要处理的列
cols = [col for col in data_tmp.columns if col in['col1','col2',...]]#得到的是一个list
# 分组的列
gp_col = 'product_id'
# 根据分组计算平均值
df_mean = data_tmp.groupby(gp_col)[cols].mean()
df_mean

效果如下:
在这里插入图片描述
我这个例子可能不太直观,推荐看我的参考博客里面的例子

18.对dataframe进行排序,参考博客为pandas学习:对series和dataframe进行排序
1)按列值进行排序
df.sort_values(by=‘col_name’,ascending=True) # ascending取True表示按升序排序,取False表示按降序排序,效果如下:

df_mean.sort_values(by='final_review_score',ascending=False)

在这里插入图片描述

19.把某一列设置为索引:

df.set_index(['col_name',inplace=True])

20.对时间进行操作:Pandas日期数据处理:如何按日期筛选、显示及统计数据。这里提几个我现在用到的:
1)把字符串形式的日期转成特定的日期数据结构

df['review_date']=pd.to_datetime(df['review_date'])

2)按季度统计

small_data[0].resample('QS').count().to_period('M')

结果:
在这里插入图片描述
2011-01表示2011年1+2+3月份的销售数据,即2011第1季度的销量;2011-04表示2011年4+5+6,即第2季度的销量

3)获取某个月的数据:

df['2013-12']

在这里插入图片描述

21.把多个dataframe纵向拼接到一起
df1.append(df2)
横向拼接:pd.concat([df1,df2],axis=1)

22.新建一个dataframe:
参考博客:pandas:新建dataframe的3种方法

23.修改列名:df.rename(columns={'old_name':'new_name'},inplace=True/False)

24.对某一列数据进行归一化处理

#####归一化函数#####
max_min_scaler = lambda x : (x-np.min(x))/(np.max(x)-np.min(x))
 
data[['use_dates_month']].apply(max_min_scaler)

参考自:https://blog.csdn.net/chenpe32cp/article/details/82460635

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值