【问题标题】:How to overwrite a column in a csv file using a different csv file如何使用不同的 csv 文件覆盖 csv 文件中的列
【发布时间】:2013-12-28 16:36:33
【问题描述】:

我对 python 很陌生,我完全被困住了!我有两个 csv 文件,我试图将它们合并为一个 csv 文件。下面是每个文件的前几行,包括我想要获取的实际输出文件和输出文件。 注意:我意识到文件不完全匹配(即 CO_Num 不一样),但我只是抓住了每个文件的前几行,它们不按顺序排列。

plat1.csv: 
District,Complex_ID,Structure_Num,Area,Block,Name,Long,Latitude,Operator,Status,Comments,CO_Num
4,90100,1,AC, 24, SSMANIFO,  -94.76940277,  26.95505833,,,,     ,      
4,183,1,AC, 25,  A-Hoover Spar,  -94.68872137,  26.93905139,,,,00276, 4825   
4,2008,1,AC, 857, A(Perdido),  -94.89791489,  26.12890071,,,,00689, 7835  


COMPAC.csv:
CO_Num,Operator
03249, LOUISIANA LAND AND EXPLORATION COMPANY LLC     
03267,145 OG HOLDINGS LLC                             
03271,157 OG HOLDINGS LLC             

plat2.csv
 ,90222,1,WR, 469, SS Manifold,  -90.53058044,  26.51964805,,,,     ,      
4,183,1,AC, 25,  A-Hoover Spar,  -94.68872137,  26.93905139,,,,00276, 4825   
4,10500,1,GA, 209, A,    -94.545972,    29.130363,,,,00276,   58 

desired plat2.csv
District,Complex_ID,Structure_Num,Area,Block,Name,Long,Latitude,Operator,Status,Comments,CO_Num
4, 90100,1,AC,24, SSMANIFO,-94.76940277,26.95505833,,,,                                                                
4, 183,1,AC,25,A-Hoover Spar,-94.68872137,26.93905139,EXXON MOBIL CORPORATION,,,00276                    
4,2008,1,AC, 857, A(Perdido),-94.89791489,26.12890071,SHELL OFFSHORE INC.,,,00689

我需要根据 CO_Num 列加入文件。我遇到的问题是 Operator 列。在 plat1.csv 中该列是空的,我需要使用 COMPAC.csv 文件来填充它。我尝试使用下面的代码,但它不起作用。 plat2.csv 中的 Operator 字段仍为空。

import pandas as pd

c=pd.read_csv("c:/platform/plat1.csv")

d=pd.read_csv("c:/platform/COMPAC.csv")

merged=c.merge(d, how='left')

merged.to_csv("c:/platform/plat2.csv", index=False)

我还应该提到,并非 plat1.csv 中的每一行都有一个 CO_Num。我认为这可能是问题的一部分,但是当我在将 plat1.csv 和 COMPAC.csv 剪裁为每行(显然与 CO_Numb 匹配)后重新运行时,它仍然不起作用。

之后,我尝试使用剪辑的文件再次重新运行它,但我从 plat1.csv 中删除了 Operator 列。成功了,但我需要 Operator 列位于 plat1.csv 中的位置,而不是末尾。

基本上,我需要一种方法来加入/合并这两个 csv 文件,其中 plat1.csv 中的 Operator 列被 COMPAC.csv 文件中的内容覆盖,如果没有 CO_Num,则该行在运算符列(所有其他列保持不变)。

再一次,我对此很陌生,或者如果有什么不明白的地方或者如果您有任何问题,请告诉我!

【问题讨论】:

  • 你需要使用python吗?
  • 是的,老板说必须是python。不知道为什么,但我只是听从命令

标签: python csv join merge pandas


【解决方案1】:

您不应该在合并中包含 c 的空 Operator 列(包括它意味着合并 CO_Num 和 Operator,这意味着没有共享键):

merged = c[col for col in c.columns if col != 'Operator'].merge(d, how='left')

【讨论】:

  • 感谢您的回复!我试过你的建议,但似乎没有用。 Operator 列仍然是空的,并且列的顺序现在不同了。我需要保持它在 plat1.csv 中的顺序,但我得到了:Area,Block,CO_Num,Comments,Complex_ID,District,Latitude,Long,Name,Status,Structure_Num,depth,Operator
  • @Abby 算子栏还是空的??这很令人困惑。您能否将 csvs 的头部(或一些显示这一点的示例框架)附加到您的问题中......我认为它不应该是空的,除非没有 CO_Num 匹配。
  • 我返回并从每个文件中添加了几行到我的问题中。当我尝试从上面运行您编辑的代码时,它告诉我“无法运行脚本-语法错误-无效语法”
猜你喜欢
  • 2013-05-20
  • 2016-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多