簡體   English   中英

在 2 個 csv 文件上使用 Pandas 進行左合並

[英]Left merge using pandas on 2 csv files

我有 2 張 csv 表:

我正在嘗試找到一種將 table2 合並到 table1 的方法。 只要 table1 和 table2 具有相同的 Name 值,則將 table1 中的相應價格替換為 table2 中找到的價格,否則保持 table1 不變。

當前代碼:

table1 = pd.read_csv('path/table1.csv', index_col=0)
table2 = pd.read_csv('path/table2.csv', index_col=0)
print(table1)
print(table2)

new_table = table1[["Name ", "ATT1", "ATT2"]].merge(table2[["Price", "Name "]], on="Name ", how="left")
print(new_table)

但是,這會導致以下情況:

   Price  Name   ATT1  ATT2
0     12   APPL    69    81
1    900  GOOGL   303   392
2     32    INV    39     9
   Price     Name 
0   1231      APPL
1     39  FACEBOOK
   Name   ATT1  ATT2   Price
0   APPL    69    81  1231.0
1  GOOGL   303   392     NaN
2    INV    39     9     NaN

我想要 new_table 打印的是:

   Name   ATT1  ATT2   Price
0   APPL    69    81  1231.0
1  GOOGL   303   392     900
2    INV    39     9     32

在合並之前從 table1 中drop “Price”列:

new_table = table1.drop("Price", axis=1).merge(table2, on="Name", how="left")

>>> new_table
    Name  ATT1  ATT2   Price
0   APPL    69    81  1231.0
1  GOOGL   303   392     NaN
2    INV    39     9     NaN

順便說一句,兩個表中的“未命名:0”列可能是由於 csv 文件中的索引列未命名。 您可以通過將index_col=0傳遞給pd.read_csv來避免這種情況, pd.read_csv所示:

table1 = pd.read_csv('path/table1.csv', index_col=0)
table2 = pd.read_csv('path/table2.csv', index_col=0)

或者,只使用您在merge需要的列:

new_table = table1[["Name", "ATT1", "ATT2"]].merge(table2[["Price", "Name"]], on="Name", how="left")

暫無
暫無

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

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