预期的字符串,int 在大文件上使用 pandas 数据帧时

Posted

技术标签:

【中文标题】预期的字符串,int 在大文件上使用 pandas 数据帧时【英文标题】:expected string, int found While using pandas dataframe on a large file 【发布时间】:2017-07-06 11:28:16 【问题描述】:

我已经问过a question,但是当我对超过百万行的文件执行以下代码时遇到了问题。

代码:

import numpy as np
import pandas as pd
import xlrd 
import xlsxwriter


 df = pd.read_excel('full-cust-data-nonconcat.xlsx')

 df  =df.groupby('ORDER_ID')['ASIN'].agg(','.join).reset_index()

 writer = pd.ExcelWriter('PythonExport-Data.xlsx', engine='xlsxwriter')
 df.to_excel(writer, sheet_name='Sheet1')
 writer.save()

 print df

错误:

Traceback (most recent call last):
 File "grouping-data.py", line 9, in <module>
df  =df.groupby('ORDER_ID')['ASIN'].agg(','.join).reset_index()
 File "/Library/Python/2.7/site-packages/pandas/core/groupby.py", line 2668, in aggregate
  result = self._aggregate_named(func_or_funcs, *args, **kwargs)
  File "/Library/Python/2.7/site-packages/pandas/core/groupby.py", line 2786, in _aggregate_named
   output = func(group, *args, **kwargs)
 TypeError: sequence item 0: expected string, int found

由于它是一个巨大的文件,我如何检查它在哪里找到字符串并获取 int?

有什么办法可以先把这些都转成字符串?

示例数据:(这些 id 是字母数字)

ID1 Some_other_id1
ID2 Some_other_id2

【问题讨论】:

【参考方案1】:

您可以在agg 函数中编写一个 lambda 表达式来进行转换:

df.groupby('ORDER_ID')['ASIN'].agg(lambda x: ','.join(x.astype(str)).reset_index()

或者在聚合前转换数据类型:

df['ASIN'].astype(str).groupby(df['ORDER_ID']).agg(','.join).reset_index()

【讨论】:

感谢它的工作。但是,当我在另一个包含一个字符串列的文件上尝试它时,它会给出错误:文件“grouping-data.py”,第 11 行,在 df = df['ASIN'].astype(str).groupby( df['ORDER_ID']).agg(','.join).reset_index() 文件“/Library/Python/2.7/site-packages/pandas/core/frame.py”,第 2059 行,在 getitem return self._getitem_column(key) File "/Library/Python/2.7/site-packages/pandas/core/frame.py", line 2066, in _getitem_column return self._get_item_cache(key) File "/Library/ Python/2.7/site-packages/pandas/core/generic.py”,第 1386 行,在 _get_item_cache 值 = sel 我不确定这是什么,也许你可以分享一些命令失败的数据。

以上是关于预期的字符串,int 在大文件上使用 pandas 数据帧时的主要内容,如果未能解决你的问题,请参考以下文章

在大文件上使用 rsync 的 gsutil int 错误

在大矩阵中搜索值

如何在 python pandas 或大查询上对多个列进行枢轴操作。最好在大查询上

Jupyter ipython 内核在大文件加载时死机

Perl SQL::SplitStatement 挂在大字符串上

无法将 pandas 列从字符串转换为 int