【问题标题】:Write Dataframe row to excel sheet using Pandas使用 Pandas 将 Dataframe 行写入 Excel 工作表
【发布时间】:2021-04-16 23:17:27
【问题描述】:

如何将数据框中返回的行保存到 Excel 工作表中?

故事:正在处理包含加拿大邮政编码的大型 txt 文件(170 万行)。我创建了一个数据框,并将我需要的值提取到其中。数据框的一列是省 ID (df['PID'])。我创建了一个在该 PID 列中找到的唯一值的列表,并在新的 Excel 电子表格中成功创建了 (13) 个工作表,每个工作表都以唯一的 PID 命名。

问题:每张表只包含标题,而不包含行的值。

我在将匹配行写入工作表时遇到问题。这是我的代码:

import pandas as pd

# parse text file into dataframe
path = 'the_file.txt'
df = pd.read_csv(path, sep='\t', header=None, names=['ORIG', 'PID','PCODE'], encoding='iso-8859-1')

# extract characters to fill values
df['ORIG'] = df['ORIG']
df['PID'] = df['ORIG'].str[11:13].astype(int)
df['PCODE'] = df['ORIG'].str[:6]

# create list of unique province ID's
prov_ids = df['PID'].unique().tolist()
prov_ids_string = map(str, prov_ids)

# create new excel file
writer = pd.ExcelWriter('CanData.xlsx', engine='xlsxwriter')

for id in prov_ids_string:
    mydf = df.loc[df.PID==id]
    # NEED TO WRITE VALUES FROM ROW INTO SHEET HERE*
    mydf.to_excel(writer, sheet_name=id)

writer.save()

我知道应该写在哪里,但我没有得到正确的结果。如何仅将具有匹配 PID 的行写入各自的工作表?

谢谢

【问题讨论】:

  • 你在这里得到什么:mydf = df.loc[df.PID==id] 听起来你只是在写一个空的数据帧。
  • 我正在尝试使用该行“循环”通过列 PID,并根据该值将整行保存到相应的工作表(即:PID==10,保存到工作表 '10 ')。你是对的,数据框是空的,但工作表是创建的

标签: python excel pandas python-2.7 dataframe


【解决方案1】:

以下应该有效:

import pandas as pd
import xlsxwriter
# parse text file into dataframe

# extract characters to fill values
df['ORIG'] = df['ORIG']
df['PID'] = df['ORIG'].str[11:13].astype(int)
df['PCODE'] = df['ORIG'].str[:6]

# create list of unique province ID's
prov_ids = df['PID'].unique().tolist()
#prov_ids_string = map(str, prov_ids)

# create new excel file
writer = pd.ExcelWriter('./CanData.xlsx', engine='xlsxwriter')

for idx in prov_ids:
    mydf = df.loc[df.PID==idx]
    # NEED TO WRITE VALUES FROM ROW INTO SHEET HERE*
    mydf.to_excel(writer, sheet_name=str(idx))

writer.save()

例如数据:

df = pd.DataFrame()
df['ORIG'] = ['aaaaaa111111111111111111111',
             'bbbbbb2222222222222222222222']
df['ORIG'] = df['ORIG']
df['PID'] = df['ORIG'].str[11:13].astype(int)
df['PCODE'] = df['ORIG'].str[:6]
print(df)

在我的工作表11 中,我有:

【讨论】:

  • 谢谢安托万!不确定我的映射步骤是否引起了问题,或者我只是忘记了 xlxs 导入语句.. d'oh 无论哪种方式,脚本现在都按预期排序,谢谢,祝你有美好的一天! :)
猜你喜欢
  • 1970-01-01
  • 2019-02-04
  • 2019-09-16
  • 2014-11-09
  • 1970-01-01
  • 1970-01-01
  • 2019-07-06
  • 2019-08-23
  • 1970-01-01
相关资源
最近更新 更多