簡體   English   中英

Python Pandas - 具有不同列的Concat數據幀忽略列名稱

[英]Python Pandas - Concat dataframes with different columns ignoring column names

我有兩個pandas.DataFrames ,我想組合成一個。 數據框具有相同的列數,順序相同,但列標題不同。 如何有效地組合這些數據幀?

df_ger
index  Datum   Zahl1   Zahl2
0      1-1-17  1       2
1      2-1-17  3       4

df_uk
index  Date    No1     No2
0      1-1-17  5       6
1      2-1-17  7       8

desired output
index  Datum   Zahl1   Zahl2
0      1-1-17  1       2
1      2-1-17  3       4
2      1-1-17  5       6
3      2-1-17  7       8

到目前為止,我想出的唯一方法是重命名列標題,然后使用pd.concat([df_ger, df_uk], axis=0, ignore_index=True) 但是,我希望找到一種更通用的方法。

如果列始終處於相同的順序,您可以機械地rename列,並執行append

碼:

new_cols = {x: y for x, y in zip(df_uk.columns, df_ger.columns)}
df_out = df_ger.append(df_uk.rename(columns=new_cols))

測試代碼:

df_ger = pd.read_fwf(StringIO(
    u"""
        index  Datum   Zahl1   Zahl2
        0      1-1-17  1       2
        1      2-1-17  3       4"""),
    header=1).set_index('index')

df_uk = pd.read_fwf(StringIO(
    u"""
        index  Date    No1     No2
        0      1-1-17  5       6
        1      2-1-17  7       8"""),
    header=1).set_index('index')

print(df_uk)
print(df_ger)

new_cols = {x: y for x, y in zip(df_uk.columns, df_ger.columns)}
df_out = df_ger.append(df_uk.rename(columns=new_cols))

print(df_out)

結果:

         Date  No1  No2
index                  
0      1-1-17    5    6
1      2-1-17    7    8

        Datum  Zahl1  Zahl2
index                      
0      1-1-17      1      2
1      2-1-17      3      4

        Datum  Zahl1  Zahl2
index                      
0      1-1-17      1      2
1      2-1-17      3      4
0      1-1-17      5      6
1      2-1-17      7      8

如果您可以確定兩個數據幀的結構保持不變,我會看到兩個選項:

  1. 保留所選默認語言的數據框列名稱(我假設為en_GB),並將它們復制到:

     df_ger.columns = df_uk.columns df_combined = pd.concat([df_ger, df_uk], axis=0, ignore_index=True) 

    這適用於列名稱。 但是,從技術上講,它仍然是重命名的。

  2. 使用numpy.ndarrays將數據從數據框中拉出,將它們連接成numpy,然后再次從中生成一個數據幀:

     np_ger_data = df_ger.as_matrix() np_uk_data = df_uk.as_matrix() np_combined_data = numpy.concatenate([np_ger_data, np_uk_data], axis=0) df_combined = pd.DataFrame(np_combined_data, columns=["Date", "No1", "No2"]) 

    這個解決方案需要更多資源,所以我會選擇第一個。

我不確定這是否比你的想法更簡單,但如果主要目標是一般的話,那么這應該是一個假設:兩個文件中的列匹配,例如,如果date是第一列,翻譯版本也將是第一列。

# number of columns
n_columns = len(df_ger.columns)

# save final columns names
columns = df_uk.columns

# rename both columns to numbers
df_ger.columns = range(n_columns)
df_uk.columns = range(n_columns)

# concat columns
df_out = pd.concat([df_ger, df_uk], axis=0, ignore_index=True)

# rename columns in new dataframe
df_out.columns = columns

暫無
暫無

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

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