【问题标题】:Append Py Pandas Dataframes into a single .csv, iterating by separate list将 Py Pandas 数据帧附加到单个 .csv 中,按单独的列表进行迭代
【发布时间】:2014-09-05 23:33:35
【问题描述】:

我正在尝试使用 pandas 将三个单独的平面文件中的内容合并到一个 .csv 中。其中一个输出字段“StoreID”基于一个单独的 ID 值列表(“Stores.txt”)。本质上,我需要将合并的数据框发布为一系列 csv 行,同时将每个商店 ID 的结果附加到第三列中。我在迭代语法方面遇到问题。任何帮助将不胜感激!

import pandas as pd

items = pd.read_csv("Item_List.csv")
store_loc = pd.read_csv("Store_Locations.csv")
stores = open("Stores.txt")

for i in stores:
    item_merged = items.merge(store_loc, on='itemCat')
    item_merged['storeID'] = i
item_merged.to_csv("stores_items_output.csv", index=False)

假设商店.txt:

3
5
6

期望的输出,给定项目和位置的连接列表:

itemID,storeLocation,StoreID
12345,ABCDE,3
23456,ABCDE,3
34567,BCDEF,3
12345,ABCDE,5
23456,ABCDE,5
34567,BCDEF,5
12345,ABCDE,6
23456,ABCDE,6
34567,BCDEF,6

【问题讨论】:

  • 听起来您正在尝试将 itemID 和 storeLocation 的组合 dfs 与每个 StoreID 复制,对吗?最好将它们连接起来,但在连接之前设置“StoreID”,此时您正在用最后一次设置操作覆盖每个合并,因此您的所有行都将具有相同的“storeID”。我只需创建一个临时 df 或初始合并,设置“storeID”列,然后合并或连接到您的 item_merged'df。

标签: python csv pandas iteration dataframe


【解决方案1】:

如果我理解您的尝试,您的代码中的问题是您用最后一个值覆盖了商店 ID,因此它们都将具有相同的商店 ID。

您似乎想要的是 3 个 dfs,其中每个合并的项目和位置都有 3 个商店 ID 排列。

我的方法是在循环外合并,制作一个 copy 的临时 df,设置此 df 的 storeId 并将 concat 设置为您合并的 df,然后写入 csv:

# our merged items and store locations
merged_items = items.merge(store_loc, on='itemCat')
for i in stores:
    # take a copy
    temp_df = merged_items.copy()
    # set the store id
    temp_df['storeID'] = i
    # now just concat
    item_merged = pd.concat([iterm_merged, temp_df], ignore_index=True)

# rest of code is same

【讨论】:

  • 谢谢,埃德。实际上,我正在查看 n 个 storeID 值(以 100 为单位)。目的是为每 1 个 storeID 循环和连接所有 itemID 到 StoreLocation 对
  • 您最好先附加到一个列表,然后使用 pandas 将它们连接起来,以这种方式循环并连接它们会非常低效。
猜你喜欢
  • 2020-07-15
  • 1970-01-01
  • 2020-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-23
  • 1970-01-01
  • 2017-10-31
相关资源
最近更新 更多