我是var sf_new_id = "#sf_widget_choice-32\\:14\\.86\\:1\\:1";
和pandas
的新手,所以我希望这会有意义。
我已经将python
表从网站解析为multiple
,不幸的是,如果该值不适用于已解析的数据,则表中省略了该表。因此,我现在拥有包含不同列数的CSV文件。
我过去曾使用multiple CSV files
和read_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
此代码合并数据,但由于列数不同,它们不在正确的位置......
非常感谢任何帮助。
答案 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,
所以我将其从上面的代码中删除了