Python 处理我收集的数据。如何获取csv';s在熊猫数据帧上排列
我有两个csv,其中有两列:项目和价格。有些csv的行数不同,有些完全匹配。然后如何组合csv,使价格与正确的索引名称(项目)匹配,其中每个csv的价格进入其自己的列(作为csv的日期),如果该项目不在索引中,它将被连接? 我手动添加了文件创建日期作为每个csv的另一列,因为我在生成第一批时没有考虑到这一点,但我不确定这是否真的有用,因为我可以将标签名称设置为日期 我是这样想的:Python 处理我收集的数据。如何获取csv';s在熊猫数据帧上排列,python,pandas,csv,dataframe,Python,Pandas,Csv,Dataframe,我有两个csv,其中有两列:项目和价格。有些csv的行数不同,有些完全匹配。然后如何组合csv,使价格与正确的索引名称(项目)匹配,其中每个csv的价格进入其自己的列(作为csv的日期),如果该项目不在索引中,它将被连接? 我手动添加了文件创建日期作为每个csv的另一列,因为我在生成第一批时没有考虑到这一点,但我不确定这是否真的有用,因为我可以将标签名称设置为日期 我是这样想的: Item csv/date1 csv/date2 csv
Item csv/date1 csv/date2 csv/date...
Topper Blue Glitter1 ea 2.50 2.75 2.55
Topper Pink Glitter1 ea 2.50 2.75 2.55
Bamboo Needles 35MM1 ea 2.75 2.75 2.99
6MM Knitting Needles ea 3.50
8MM Bamboo Needles ea 3.79
编辑
concat的输出:
0 Date Price
Item
DoleSunflower Bacon Crunch Cho.. NaN 2020-03-16 $4.98
Apple Slices280 g NaN 2020-03-16 $4.00
PC OrganicsCooking Onions907 g NaN 2020-03-16 $2.98
Limes1 ea NaN 2020-03-16 $0.68
Granny Smith Apples NaN 2020-03-16 $1.09
... ... ... ...
Greenhouse Peppers, Yellow 2020-03-17 NaN NaN
Lettuce Iceberg1 ea 2020-03-17 NaN NaN
Farmer's MarketSweet Baby 2020-03-17 NaN NaN
Kohlrabi 2020-03-17 NaN NaN
Farmer's MarketFM English Cucu 2020-03-17 NaN NaN
合并输出:
Price_x Date_x Price_y Date_y
Item
DoleSunflower Bacon C $4.98 2020-03-16 NaN NaN
Apple Slices280 g $4.00 2020-03-16 NaN NaN
PC OrganicsCooking On $2.98 2020-03-16 NaN NaN
Limes1 ea $0.68 2020-03-16 $0.68 2020-03-17
Limes1 ea $0.68 2020-03-16 $0.68 2020-03-17
最后用concat得到了预期的结果。下面的建议简化了迭代:
03-16-2020 03-17-2020 03-20-2020
Item
DoleSunflower Bacon Crunch $4.98 NaN NaN
Apple Slices280 g $4.00 NaN NaN
PC OrganicsCooking Onio $2.98 NaN NaN
Limes1 ea $0.68 NaN NaN
Granny Smith Apple $1.09 NaN NaN
... ... ... ...
Green Cabbage NaN NaN $2.52
Celery Stalks1 ea NaN NaN $1.9
将每个CSV读入不同的数据框,将
项目
设置为索引,将价格
列重命名为创建日期
,最后连接所有CSV,这是一个预先定义CSV名称的示例,可能需要进行一些调整:
csv_files = ['file1.csv', 'file2.csv', 'file3.csv']
dfs = [pd.read_csv(x) for x in csv_files]
for df in dfs:
df.Date = pd.to_datetime(df.Date)
df.set_index('Item', inplace=True)
date = df.Date.max().strftime('%Y_%m_%d')
df.rename({'Price': date}, inplace=True)
df_final = pd.concat(dfs)
使用
read\u csv
创建数据帧后,在项目列上设置索引
,然后应执行concat
或合并
pd.concat([df1, df2], axis=1, join='outer')
df1.merge(df2, how='outer', left_index=True, right_index=True)
避免外部联接除非确实需要,否则仅当您要填充所有记录时才使用它,否则使用内部联接。
如果你喜欢的话,你也可以做一个左连接或右连接。
在这里阅读更多:和
如果不查看数据,很难说得更多。嘿,你能发布一个CSV的样子吗?你能更具体地说明问题是什么吗?请参阅,.AMC,如果索引已经存在,我不知道如何让csv在不同列的行上排列,如果索引不存在,则只将其索引(即项目)放在底部或项目列上的任何位置。我尝试了此操作,但在设置日期变量时出错。显然,该文件不存在。这是有道理的,因为我不知道变量是如何命名的。抱歉,不知道如何格式化此。。。但是我得到了日期的错误…--->2 df.Date=pd.to_datetime(df.Date)AttributeError:'generator'对象没有属性'Date'您的一个CSV文件没有
Date
列读取CSV时,它没有包含确保dfs
是一个数据帧列表,其中每个元素都是CSV文件的数据帧,三是查看其中一个是否缺少Date
:data\u columns=['Date'在df.columns中表示dfs中的df.columns]
,data\u columns
应该只包含True
值。我发现concat部分有错误。起初我认为这是因为行不均匀,但我手工编辑了实际的csv,结果还是一样。与将轴设置为列[?]有关的内容,因为它在设置为0后消失。不管怎样,我尝试了一些我在编辑中包含的东西,这些东西很有效,现在我必须弄清楚如何在那里获得价格。