在Pandas中合并缺少列的CSV文件

时间:2015-06-03 06:09:49

标签: python csv pandas

我是var sf_new_id = "#sf_widget_choice-32\\:14\\.86\\:1\\:1"; pandas的新手,所以我希望这会有意义。

我已经将python表从网站解析为multiple,不幸的是,如果该值不适用于已解析的数据,则表中省略了该表。因此,我现在拥有包含不同列数的CSV文件。

我过去曾使用multiple CSV filesread_csv(),当数据干净时,它就像一个魅力,但我在这里难倒。

我认为可能有一种方法可以通过" to_csv()"如果我首先向map提供所有列标题,则读取数据,然后将每个文件映射到主文件中的列。

E.g 。使用pandas DF后,read_csv()会查看主合并文件和" to_csv()"合并文件中正确列的可用字段。

这是数据的简短版本:

map

这是我到目前为止的代码。

File 1:
ID, Price, Name, 
1, $800, Jim
File 2:
ID, Price, Address, Name
2, $500, 1 Main St., Amanda


Desired Output:
ID, Price, Adress, Name
1, $800, , Jim
2, $500, 1 Main St., Amanda

此代码合并数据,但由于列数不同,它们不在正确的位置......

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:2)

尝试使用pandas concat [1]函数,该函数默认为外部联接(所有列都将出现,缺失的值将为NaN)。例如:

import pandas as pd

# you would read each table into its own data frame using read_csv
f1 = pd.DataFrame({'ID': [1], 'Price': [800], 'Name': ['Jim']})
f2 = pd.DataFrame({'ID': [2], 'Price': [500], 'Address': '1 Main St.', 'Name': ['Amanda']})

pd.concat([f1, f2]) # merged data frame

[1] http://pandas.pydata.org/pandas-docs/stable/merging.html

答案 1 :(得分:1)

这是一个完整的示例,演示如何加载文件并使用concat合并它们:

In [297]:
import pandas as pd
import io
t="""ID, Price, Name
1, $800, Jim"""
df = pd.read_csv(io.StringIO(t), sep=',\s+')
t1="""ID, Price, Address, Name
2, $500, 1 Main St., Amanda"""
df1 = pd.read_csv(io.StringIO(t1), sep=',\s+')
pd.concat([df,df1], ignore_index=True)

Out[297]:
      Address  ID    Name Price
0         NaN   1     Jim  $800
1  1 Main St.   2  Amanda  $500

请注意,我通过了ignore_index=True,否则您将获得重复的索引条目,我认为这不是您想要的,我还假设您的原始数据样本中有文件1&#39 ;你的标题行中没有真正的尾随逗号:ID, Price, Name,所以我将其从上面的代码中删除了