多场景下的Pandas使用技巧

记录涉及使用pandas处理数据的一些方法和错误

Pandas读取数据相关

1.读取csv文件

df_source = pd.read_csv('[file_path].csv', encoding='UTF-8')

2.读取.xlsx文件

df_source = pd.read_excel('[file_path].xlsx', encoding='utf-8')  # 原始dataframe

Pandas DataFrame操作

1.获取dataframe某一列的数据

df_source = pd.read_excel('[file_path].xlsx', encoding='utf-8')  # 原始dataframe
df_extract_left = df_source['[col_name]']

2.获取某几列的数据

df_source = pd.read_excel('[file_path].xlsx', encoding='utf-8')
col_n = ['col_name1', 'col_name2', 'col_name3', 'col_name4']
df_extract_right = pd.DataFrame(df_source ,columns=col_n)

3.Data Frame左连接操作

针对连个不同dataframe列名做左连接

df_merge = pd.merge(df_left, df_right, how='left', left_on='[左表的列名]', right_on='【右表的列名】')

左连接N->N的连接测试

左表

left_dict = {
    'Fruits':['Apple','Banana','Cherry','Dates','Eggfruit'],
    'Color': ['Red', 'Gray', 'Red', 'Brown', 'Yellow']
}
df_left = pd.DataFrame(left_dict)
df_left

dataframe

右表

right_dict = {
    'Fruits':['A','B','C','D','E'],
    'Color': ['Red', 'Yellow', 'Red', 'Brown', 'Yellow']
}
df_right = pd.DataFrame(right_dict)
df_right

在这里插入图片描述

连接处理

df = pd.merge(df_left, df_right, how='left', left_on='Color', right_on='Color')
df

在这里插入图片描述

4.处理 dataframe 某一列的值

具体要求: 删除dataframe某一列中的换行符 \r\n

注意!!!!!!!!
replace(‘\\n’,‘’) 无法得到正确的结果的

# 去除列多余的字符 \r\n
df['要处理列的列名'] = df.apply(lambda x:str(x['要处理列的列名']).replace('\r','').replace('\n','') ,axis=1)
df

5.根据dataframe某一列的值对其他列做聚合

要求 : 根据某一列的值 做group by后 ,属于同一group的其他列的字符串做一个拼接

例如

  • a “111”
  • a “222”
  • b “333”
  • 结果
  • a ”111,222“
  • b “333”
df2 = df.groupby('group by的列')['做字符串拼接的列'].apply(lambda x:x.str.cat(sep=","))
df2

要求 : 对dataframe的两列进行聚合,并对第三列进行求和

例如:

  • a “111” 3
  • a “222” 5
  • a “111” 6
  • b “112” 4
  • b “222” 4
  • b “222” 2

结果

  • a “111” 9
  • a “222” 5
  • b “112” 4
  • b “222” 6
df.groupby(by=['聚合列1','聚合列2'])['第三列'].sum().reset_index(drop=False)

6. 删除某几列的数据

利用索引删除多行,不能写0:2

df.drop([0, 1])

利用列名删除多列

df.drop(labels=[‘id’,‘class’], axis=1)

7. 筛选出某列中符合条件的行

df[df['列名'] == '待筛选的值']

8. groupby后多行合并为一行

例如 group 1:
| col_a | col_b | col_c
| aaa | type1 | 1000
| aaa | type2 | 2000
结果:
| col_a | type1 | type2
| aaa | 1000 | 2000

def concat_df(x):
    df_res = pd.pivot(x, index='col_a', columns='col_b', values="col_c")
    df_res.insert(0,'col_a',x.iloc[0,0]) #调试时发现结果缺失col_a列,故添加该列值
    return df_res
df_res =  df.groupby('col_a').apply(lambda x : concat_df(x))

9. 删除dataframe中某一列的符合条件的行

df_res=df.drop(df[df['列名']=='条件'].index)

10. groupby后遍历

(1) for循环遍历(推荐)

for name,df_group in df.groupby(by=['key']):
	# name为当前group的key值 str类型
	# df_group为当前的子group dataframe类型

(2) apply 匿名函数遍历 此方法在涉及到全局变量的赋值使用时不太方便

# x为每个group的dataframe
name,df_group in df.groupby(by=['key']).apply(lamdba x : print(x))

举例:

df2 = pd.DataFrame([['Tom', 16], ['Nancy', 18], ['Jack', 15],['Tom', 18],['Jack', 13],['Jack', 115]],columns=['cola','colb'])
	
	cola	colb
	Tom	    16
	Nancy	18
	Jack	15
	Tom	    18
	Jack	13
	Jack	115

# 方法一:
for name,df_group in df2.groupby(by=['cola']):
    # 只演示第一个group的值
    print(name) # Jack
    print(df_group)
   cola  colb
   Jack    15
   Jack    13
   Jack   115

# 方法二
df2.groupby(by=['cola']).apply(lambda x: print(x))
  
   cola  colb
2  Jack    15
4  Jack    13
5  Jack   115
   
    cola  colb
1  Nancy    18
 
  cola  colb
0  Tom    16
3  Tom    18

11. dataframe更改列名

df.rename(columns={'two':'twotwo'},inplace=True)

12. dataframe隔行相减

需求:假设有以下dataframe,要计算每两行之间的时间差
date
2019-08-29 09:20:37
2019-08-29 09:21:23
2019-08-29 09:22:09

		df_res = pd.DataFrame()
		df['DATE1'] = df['DATE'].shift(1)
        df_time = (df['DATE'] - df['DATE1']).dt.total_seconds()
        df_time.dropna(axis=0,inplace=True)
        df_res = pd.concat([df_res,df_time])

12. dataframe删除值为空的列或者行

df.dropna(axis=0,inplace=True) # axis = 0 为行 axis = 1为列 ,inplace = True表示替换原df

13. dataframe删某列值中符合条件的行

需求 :现在有2个dataframe,要求删除在df2中某列包含该值的行,该值为df1中的某列所出现的值
df1
a b c d
1 2 3 3
2 …
3 …
df2
a b c d
1 2 3 3
2 …
3 …
4…
5…
6…
结果
a b c d
4…
5…
6…

df2=df2[~df2['a'].isin(df1['a'].unique())]

14.统计dataframe每一列出现的不同值的最小值

count_min = min(df['列名'].value_counts())
# 返回一个series

15.统计两列中数值相同的行数

df1
a b c d
1 2 3 3
2 2 3 4
3 3 4 5
统计a,b两列值相同的行的个数
结果 2

len(set(df1['a']) & set(df1['b']))

16.删除DataFrame两列中值相同的行

df1
a b c d
1 2 3 3
2 2 3 4
3 3 4 5
删除a,b列值相同的行 结果
a b c d
1 2 3 3

df1.loc[~(df1['a']==df1['b'])]

16.df判断某列值为True,将另外一列对应的值相加

df1
a b
T 2
F 2
T 3
b列中的某几个值相加,这些值为a列中对应值为T的
结果 5

df.loc[df['a']==True,'b'].sum()
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: pandas是一个基于Python语言的数据处理库,具有高效、灵活、易用的特点。它可以帮助用户在Python环境下快速进行数据清洗、转换、处理和分析,从而更好地应对数据科学、机器学习等领域中的数据挑战。 在CSDN中,pandas作为Python数据科学和机器学习领域中的重要工具,受到了广大程序员和数据科学家的欢迎和使用。CSDN平台上,不仅有丰富的pandas学习资源和教程,还有海量的pandas应用案例和实践分享,可以帮助初学者快速入门,也可以帮助专业人士掌握更深入的知识和技术。 通过CSDN,用户可以获取到带领导性的、有针对性的pandas教程内容,可以通过交流、探讨和分享,获取到更多的pandas实践技巧和经验,并结交到更多志同道合的数据科学家和机器学习爱好者。同时,CSDN还提供了丰富的资源下载和代码库,可以方便用户在实践中获取更多的帮助和支持。 总之,pandas在CSDN的支持下,不断拓展应用场景,扩大用户群体,在数据科学和机器学习等领域发挥着重要的作用,促进了行业技术的进步与发展。 ### 回答2: Pandas 是一个开源的数据分析库,它是基于 NumPy 库构建的,它提供了大量的数据操作和数据处理的功能,并且可以很好地支持时间序列分析等各种数据分析的任务。 Pandas 的主要数据结构包括 Series,DataFrame 和 Panel,其中最常用的是DataFrameDataFrame 可以理解为一张表格,它包括了行和列,并且每一行都有一个索引,同时每一列也都有一个名称,因此可以很方便地对每一行或每一列进行操作,例如选择数据、去重、排序等。 Pandas 不仅提供了数据操作的功能,还提供了各种数据可视化的工具,例如基于 Matplotlib 的绘图功能、基于 Seaborn 的统计可视化库等。这些可视化工具可以更加直观地展示数据分析的结果,让人们更好地理解数据之间的关系和趋势。 在 CSDN 上,有很多关于 Pandas 的学习资料,例如官方文档、代码示例和教程等。任何想要学习数据分析的人,都可以通过 CSDN 上的这些资源,快速掌握 Pandas使用技巧,进而进行高效的数据分析。 ### 回答3: PandasPython编程语言中一种用于数据操作和处理的开源库,它提供了高性能、易于使用的数据结构和数据分析工具,是数据科学家、数据分析师和开发人员必备的工具之一。Pandas主要包括Series和DataFrame两种数据结构,分别用于存储一维数据和二维数据。除此之外,还包括数据清洗、重塑、合并等数据操作和处理方法。Pandas使用范围非常广泛,可以用于数据处理、数据可视化、机器学习、自然语言处理等领域。在CSDN社区,也有众多Python爱好者分享着Pandas的教程、实战案例和最佳实践,帮助更多人学习和使用这个强大的数据处理库。通过学习Pandas,可以更加高效地处理和分析数据,减少开发时间和成本,提高工作效率和数据处理能力。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值