python - 如何将选定的列附加到具有不同列的 df 中的 pandas 数据框

标签 python pandas dataframe

我希望能够将 df1 df2, df3 附加到一个 df_All 中,但由于每个数据帧都有不同的列。我怎么能在 for 循环中执行此操作(我还有其他必须在 for 循环中执行的操作)?

import pandas as pd
import numpy as np

df1 = pd.DataFrame.from_items([('A', [1, 2, 3]), ('B', [4, 5, 6])])
df2 = pd.DataFrame.from_items([('B', [5, 6, 7]), ('A', [8, 9, 10])])
df3 = pd.DataFrame.from_items([('C', [5, 6, 7]), ('D', [8, 9, 10]), ('A',[1,2,3]), ('B',[4,5,7])])
list = ['df1','df2','df3']
df_All = pd.DataFrame()
for i in list:
   # doing something else as well --- 
    df_All = df_All.append(i)

enter image description here

我希望我的 df_All 只有 ( A & B ),有没有办法在上面的循环中做到这一点?仅附加这两列之类的东西?

最佳答案

如果我明白你想要什么,那么你只需要从 df3 中选择“A”列和“B”列,然后使用 pd.concat :

In [35]:

df1 = pd.DataFrame.from_items([('A', [1, 2, 3]), ('B', [4, 5, 6])])
df2 = pd.DataFrame.from_items([('B', [5, 6, 7]), ('A', [8, 9, 10])])
df3 = pd.DataFrame.from_items([('C', [5, 6, 7]), ('D', [8, 9, 10]), ('A',[1,2,3]), ('B',[4,5,7])])
df_list = [df1,df2,df3[['A','B']]]
pd.concat(df_list, ignore_index=True)
Out[35]:
    A  B
0   1  4
1   2  5
2   3  6
3   8  5
4   9  6
5  10  7
6   1  4
7   2  5
8   3  7

请注意,在您的原始代码中,这是一种不良做法:

list = ['df1','df2','df3']

这会隐藏内置类型 list 加上即使它实际上是一个有效的变量名,比如 df_list 你已经创建了一个字符串列表而不是 dfs 列表.

如果你想确定公共(public)列,那么你可以使用列上的 np.intersection 方法来确定:

In [39]:

common_cols = df1.columns.intersection(df2.columns).intersection(df3.columns)
common_cols
Out[39]:
Index(['A', 'B'], dtype='object')

关于python - 如何将选定的列附加到具有不同列的 df 中的 pandas 数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29335857/

相关文章:

python - 从 pandas DataFrame 中的日期时间列中提取月份

python - 将数据帧转换为元组列表

python - 处理不同数量的返回变量

python添加2个对象或对象到列表

python - python中的多处理以加速函数

python - 如何在绘制数据之前删除某些值

Python 数据/文件 Crc

python - Pandas 数据帧列中值的最大差异

python Pandas 数据框: removing selected rows

apache-spark - Spark数据框的分区数