簡體   English   中英

如何將選定的列從具有不同列的 df 附加到 Pandas 數據幀

[英]How to append selected columns to pandas dataframe from df with different columns

我希望能夠將 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)

在此處輸入圖片說明

我希望我的 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即使它實際上是一個有效的 var 名稱,例如df_list您創建了一個字符串列表而不是 dfs 列表。

如果要確定公共列,則可以使用列上的np.intersection方法來確定:

In [39]:

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

您還可以使用集合理解從任意數據幀列表中連接所有常見列:

df_list = [df1, df2, df3]
common_cols = list(set.intersection(*(set(c) for c in df_list)))
df_new = pd.concat([df[common_cols] for df in df_list], ignore_index=True)
>>> df_new 
    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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM