gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 01:05:39 25 4
gpt4 key购买 nike

我是 pandaspython 的新手,所以我希望这会有意义。

我已经将一个网站的多个表格解析为多个CSV文件,不幸的是,如果该值对于解析的数据不可用,它就会从表格中省略。因此,我现在拥有列数不同的 CSV 文件。

我过去使用过 read_csv()to_csv() 并且当数据干净时它就像一个魅力,但我在这里被难住了.

我认为如果我首先为 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

这是我目前得到的代码。

mypath='I:\\Filepath\\'

#creating list of files to be read, and merged.
listFiles = []
for (dirpath, dirnames, filenames) in walk(mypath):
listFiles.extend(filenames)
break

# reading/writing "master headers" to new CSV using a "master header" file
headers = pd.read_csv('I:\\Filepath\\master_header.csv', index_col=0)

with open('I:\\Filepath\\merge.csv', 'wb') as f:
headers.to_csv(f)

def mergefile(filenames):


try:
# Creating a list of files read.
with open('I:\\Filepath\\file_list.txt', 'a') as f:
f.write(str(filenames)+'\n')

os.chdir('I:\\Filepath\\')
# Reading file to add.
df = pd.read_csv(filenames, index_col=0)


# Appending data (w/o header) to the new merged data CSV file.
with open('I:\\Filepath\\merge.csv', 'a') as f:


df.to_csv(f, header=False)


except Exception, e:
with open('I:\\Filepath\\all_error.txt', 'a') as f:
f.write(str(e)+'\n')

for eachfilenames in listFiles:
mergefile(eachfilenames)

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

如有任何帮助,我们将不胜感激。

最佳答案

尝试使用 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

关于python - 在 Pandas 中合并缺少列的 CSV 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30612104/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com