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.youkuaiyun.com/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.youkuaiyun.com/chenpe32cp/article/details/82460635