python - 如何遍历 Pandas 中的数据框列表?
问题描述
我有以下数据框,组合成一个列表:
df = pd.DataFrame({'numbers': [1, 2, 3], 'colors': ['red', 'white', 'blue']})
df1 = pd.DataFrame({'numbers': [7, 44, 93], 'colors': ['red', 'white', 'blue']})
df_list = [df,df1]
我想使用 for 循环,遍历它们,并打印每个数字。为此,我尝试了:
for num in df_list.numbers.unique():
val = locals()[num]
print(val)
但是得到一个错误:
AttributeError: 'list' object has no attribute 'numbers'
我也尝试过,更简单的是:
for num in df_list.numbers.unique():
print(num)
但是得到一个错误:
AttributeError: 'list' object has no attribute 'numbers'
有人问了类似的问题,但没有得到满意的答复。
解决方案
选项 A:迭代数据框列表中的值
由于您有两个数据框,因此您必须
- 逐个遍历数据帧
- 然后,对于每个数据帧 (
df_tmp
),遍历所有唯一数字
In [1]: import pandas as pd
In [2]: df = pd.DataFrame({'numbers': [1, 2, 3], 'colors': ['red', 'white', 'blue']})
...: df1 = pd.DataFrame({'numbers': [7, 44, 93], 'colors': ['red', 'white', 'blue']})
In [3]: df_list = [df,df1]
In [4]: for df_tmp in df_list:
...: for num in df_tmp['numbers'].unique():
...: print(num)
...:
1
2
3
7
44
93
注意:使用这种方法,值不一定是唯一的!(例如,如果您同时拥有2
和df['numbers']
,df1['numbers']
它将被打印两次)。
选项 B:在迭代之前合并数据帧
有时,创建另一个将所有数据框组合在一起的数据框可能会更有用。您可以像这样使用pd.concat 1来做到这一点:
In [17]: df_new = pd.concat(df_list)
In [18]: df_new
Out[18]:
numbers colors
0 1 red
1 2 white
2 3 blue
0 7 red
1 44 white
2 93 blue
然后,您可以通过以下方式遍历所有唯一元素'numbers'
:
In [19]: for num in df_new['numbers'].unique():
...: print(num)
...:
1
2
3
7
44
93
- 这将保证数字是唯一的。不利的一面是,如果您需要做的只是遍历存在于多个数据帧中的列的唯一元素,那么创建一个新的数据帧会产生一些开销。这带来了选项 C。
选项 C:仅迭代唯一值
- 如果您要做的只是遍历存在于多个数据框中的一列中的唯一元素,则不需要临时数据框。相反,您可以通过将元素集合并集来实现相同的目标
# or: nums = set().union(*(map(lambda x:set(x['numbers']), (df, df1))))
In [30]: nums = set().union(*(set(df_['numbers']) for df_ in (df, df1)))
In [31]: nums
Out[31]: {1, 2, 3, 7, 44, 93}
In [32]: for num in nums:
...: print(num)
...:
1
2
3
7
44
93
1将pd.concat()
可迭代对象(例如,列表、元组或生成器)作为第一个参数,并返回您可以使用的全新数据框。
推荐阅读
- angular - 如何限制角材质CDK拖放元素在某个轴上的拖动范围?
- ios - 在后台获取苹果健康数据
- postgresql - Postgresql比较同一张表上的两个选择结果
- javascript - 当所有预取链接都准备好时如何通知?
- linux - 我如何知道 Electron 需要运行哪些 Debian 库?
- scala - Apache Spark - 分组
- perl - 在 Azure 应用服务 IIS 上使用 responseMode executeURL 使用 httpErrors 自定义 404 错误时需要保留 HTTP 状态代码
- c# - 从同一解决方案中的另一个项目获取 appsettings.json 路径
- node.js - SequelizeConnectionRefusedError:连接 ECONNREFUSED 127.0.0.1:4321
- orm - 关系数据库的微服务