大家好,我是老吴,大家也可以叫我吴同学,再小一点的朋友也可以叫我吴师兄。欢迎大家跟我一起走进数据分析的世界,一起学习!
感兴趣的朋友可以关注我或者我的数据分析专栏,里面有许多优质的文章跟大家分享哦。
前期回顾:
学习pandas全套代码【超详细】数据查看、输入输出、选取、集成、清洗、转换、重塑、数学和统计方法、排序
学习pandas全套代码【超详细】分箱操作、分组聚合、时间序列、数据可视化
自从我整理完这两篇关于pandas的博文之后,我从博文的阅读以及收藏的数据中不难得知,大家对于这类实用性的博文的认可,同时我自己在工作中有时也会发现,即使我整理了这么多有关于pandas的内容,但或多或少还是会遗漏一些知识点,毕竟pandas实在是太多实用的功能了。
那么今天这篇博文呢,我进一步整理了前面这两篇博文没有提到的或者说讲的不够具体的实用技能,大家赶紧收藏起来吧,我保证你们迟早会用到。
目录
1 输出表格的各种设定
1.1 指定sheet输出
df.to_excel('test.xlsx', sheet_name='laowu')
1.2 指定缺失值填充
df.to_excel('test.xlsx', na_rep='-')
1.3 无穷大表示法
df.to_excel('test.xlsx', inf_rep='inf')
1.4 浮点数字格式
# 小数点后保留两位小数
df.to_excel('test.xlsx', float_format="%.2f")
1.5 只输出指定列
df.to_excel('test.xlsx', columns=['column1', 'column2', 'column3'])
1.6 不带表头
# 不带表头
df.to_excel('test.xlsx', header=False)
1.7 不带索引
df.to_excel('test.xlsx', index=False)
1.8 指定索引
df.to_excel('test.xlsx', index_label=['team', 'name'])
1.9 选取特定范围的索引
# 从第几行,第几列开始
df.to_excel('test.xlsx', startrow=10, startcol=3)
1.10 指定编码
df.to_excel('test.xlsx', encoding='utf-8')
1.11 使用指定引擎
df.style.to_excel('test.xlsx', engine='openpyxl')
1.12 冻结指定行和列
df.to_excel('test.xlsx', freeze_panes=(0,3))
2 将多个dataframe保存到同一个表格下的不同sheet中
with pd.ExcelWriter(excel_name) as writer:
df_all.to_excel(writer, sheet_name='All ', index = 0, header = None)
df_tmall.to_excel(writer, sheet_name='天猫 (非猫超) ', index = 0, header = None)
df_super.to_excel(writer, sheet_name='天猫超市 ', index = 0, header = None)
df_jd.to_excel(writer, sheet_name='京东', index = 0, header = None)
df_pdd.to_excel(writer, sheet_name='拼多多', index = 0, header = None)
3 选取、修改或删除具有指定条件的数据
3.1 选取、修改或删除具有指定条件的行
a=np.array([[1,2,3],[4,5,6],[7,8,9],[10,11,12]])
df=pd.DataFrame(a,index=['row0','row1','row2'],columns=list('ABC'))
# 选取
cond_1 = (df.B >= 5) & (df.C < 12)
df_1 = df[cond_1]
# 修改
cond_2 = (df.B >= 2) & (df.C < 12)
df.loc[cond_3, 'C'] = 0 # 满足条件的行数据中的C字段的值更改为0
# df.loc[cond_2] = 0 # 满足条件的全部字段的值都修改成0
# 删除
cond_3 = df['A'].isin([1, 7])
df_3=df[~cond_3]
- 要懂得活学活用,~这个符号用于取反,真的很实用。
- 同时,isin的功能虽然也可以用
|(或)
来实现,但效率却要远远高于|
。
3.2 选取、修改或删除具有指定条件的列
cols=[x for i,x in enumerate(df.columns) if df.iat[0,i]==3] #利用enumerate对row0进行遍历,将含有数字3的列放入cols中
# 选取某行含有特定数值的列
df_4=df[cols]
# 修改
df_5.loc[:, cols] = 0
# 删除
df_6 =df.drop(cols, axis=1) #利用drop方法将含有特定数值的列删除
3.3 删除含有空值的行或列
df1 = pd.DataFrame(
[
[np.nan, 2, np.nan, 0],
[3, 4, np.nan, 1],
[np.nan, np.nan, np.nan, 5],
[np.nan, 3, np.nan, 4]
],columns=list('ABCD'))
print(df1)
df2=df1.copy()
df1['A']=df1['A'].fillna('null') #将df中A列所有空值赋值为'null'
# 删除某列空值所在行
df1=df1[~df1['A'].isin(['null'])]
# 删除某行空值所在列
df2[0:1]=df2[0:1].fillna('null')
cols=[x for i,x in enumerate(df2.columns) if df2.iat[0,i]=='null']
df2=df2.drop(cols,axis=1)
4 添加一行数据
df=DataFrame(np.arange(16).reshape((4,4)),index=['a','b','c','d'],columns=['c1','c2','c3','c4'])
# 第一种方法
df['e'] = [1, 2, 3, 4]
# 第二种方法
df_new = pd.DataFrame([5, 6, 7, 8]).T
## 修改df4的column和df3的一致,不修改的话会导致合并之后不在同一列上
df_new.columns = df.columns
## 把两个dataframe合并,需要设置 ignore_index=True
df = pd.concat([df, df_new], ignore_index=True)
5 修改数据类型
一般情况,我们是对某一列的数据进行数据类型的修改
5.1 对指定条件的数据进行修改
df['A'].astype('str')
df['B'].astype(np.float64)
# 满足特定条件
cond = df.A > 60
df.loc[cond, 'A'].astype('str')
5.2 对指定数据类型的数据进行修改
# 将int64数据类型的数据修改成int16
# 将float64数据类型的数据修改成float32
new_types = {np.dtype(np.int64): np.int16,
np.dtype(np.float64): np.float32}
df = df.astype(df.dtypes.map(new_types).to_dict())
6 数据表格美颜
df.style
这一部分如果要讲的话实在太多了,先给自己挖个坑吧。后面有需要可以再补充。
结束语
看完这篇,还有更多知识点分享给你哦,自己慢慢找哈,就在下面链接。
推荐关注的专栏