当前位置: 首页 > 面试题库 >

旋转包含字符串的Pandas数据框-'没有要聚合的数字类型'错误

邵阳
2023-03-14
问题内容

关于此错误,有很多问题,但是环顾四周之后,我仍然无法找到解决方案的想法。我正在尝试使用字符串旋转数据框架,以使一些行数据变为列,但到目前为止还没有解决。

我的df的形状

<class 'pandas.core.frame.DataFrame'>
Int64Index: 515932 entries, 0 to 515931
Data columns (total 5 columns):
id                 515932 non-null object
cc_contact_id      515932 non-null object
Network_Name       515932 non-null object
question           515932 non-null object
response_answer    515932 non-null object
dtypes: object(5)
memory usage: 23.6+ MB

样本格式

id  contact_id  question    response_answer
16  137519  2206    State   Ca
17  137520  2206    State   Ca
18  137521  2206    State   Ca
19  137522  2206    State   Ca
20  137523  2208    City    Lancaster
21  137524  2208    City    Lancaster
22  137525  2208    City    Lancaster
23  137526  2208    City    Lancaster
24  137527  2208    Trip_End Location   Home
25  137528  2208    Trip_End Location   Home
26  137529  2208    Trip_End Location   Home
27  137530  2208    Trip_End Location   Home

我想转向的是

id  contact_id      State   City       Trip_End Location
16  137519  2206    Ca      None       None None
20  137523  2208    None    Lancaster  None None
24  137527  2208    None    None       None Home
etc. etc.

问题 值将成为列,与 response_answer 它是的相应数列,并保留IDS

我尝试过的

unified_df = pd.DataFrame(unified_data, columns=target_table_headers, dtype=object)

pivot_table = unified_df.pivot_table('response_answer',['id','cc_contact_id'],'question')
# OR
pivot_table = unified_df.pivot_table('response_answer','question')

DataError:没有要聚合的数字类型

用字符串值旋转数据框的方法是什么?


问题答案:

aggfuncin的默认pivot_table值为np.sum,它不知道如何处理字符串,并且您还没有指出应该正确地使用什么索引。尝试类似的东西:

pivot_table = unified_df.pivot_table(index=['id', 'contact_id'],
                                     columns='question', 
                                     values='response_answer',
                                     aggfunc=lambda x: ' '.join(x))

显式地每id, contact_id对设置一行,并在上旋转一组response_answerquestion。该aggfunc只是保证,如果你有多个答案中的原始数据,我们只是将它们连接起来用空格一起同样的问题。的语法pivot_table可能因您的熊猫版本而异。

这是一个简单的例子:

In [24]: import pandas as pd

In [25]: import random

In [26]: df = pd.DataFrame({'id':[100*random.randint(10, 50) for _ in range(100)], 'question': [str(random.randint(0,3)) for _ in range(100)], 'response': [str(random.randint(100,120)) for _ in range(100)]})

In [27]: df.head()
Out[27]:
     id question response
0  3100        1      116
1  4500        2      113
2  5000        1      120
3  3900        2      103
4  4300        0      117

In [28]: df.info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 100 entries, 0 to 99
Data columns (total 3 columns):
id          100 non-null int64
question    100 non-null object
response    100 non-null object
dtypes: int64(1), object(2)
memory usage: 3.1+ KB

In [29]: df.pivot_table(index='id', columns='question', values='response', aggfunc=lambda x: ' '.join(x)).head()
Out[29]:
question        0        1    2        3
id
1000      110 120      NaN  100      NaN
1100          NaN  106 108  104      NaN
1200      104 113      119  NaN      101
1300          102      NaN  116  108 120
1400          NaN      NaN  116      NaN


 类似资料:
  • 问题内容: 我想从以下带有列,的数据框中创建数据透视表。数据透视表显示,但不显示。当我只用尝试时,我得到了错误。如何解决此问题,使我同时看到数字字段和字段(字符串) 问题答案: 您可以使用和: 产量 或者,与配合使用: 产量 使用, 通过获取找到的第一个值对每个或组进行聚合。在您的情况下,似乎没有重复项,因此第一个值与唯一的值相同。

  • 我想检查数据帧中的列是否由字符串组成,以便为机器学习目的用数字标记它们。有些列由数字组成,我不想更改它们。列示例如下所示: 谢谢=)

  • 问题内容: 无论如何,有没有使用映射功能或更好的方法来替换整个数据框中的值? 我只知道如何在系列上执行映射。 我想用数字替换“ tesst”和“ set”列中的字符串,例如set = 1,test = 2 这是我的数据集的一个示例:(原始数据集非常大) 最终结果应该是 感谢您的指教, 问题答案: 那呢 正如@Jeff在评论中指出的那样,在熊猫版本<0.11.1中,手动添加到末尾以正确转换tesst

  • 问题内容: 我有一个字节数组,其中包含我希望转换为字符串的ASCII字符。例如: myByteArray在循环后应包含字符串“ 12345678”。如何将此字符串转换为String变量? 谢谢! 问题答案: 用 字符串类为此提供了一个构造函数。 旁注:此处的第二个参数是CharSet(字节编码),应谨慎处理。这里更多。

  • 问题内容: 我对某些分组代码有疑问,我敢肯定一旦运行(在较早的熊猫版本上)。在0.9上,我 没有数字类型来汇总 错误。有任何想法吗? 问题答案: 您如何生成数据? 看看输出如何显示您的数据是“对象”类型的?groupby操作首先专门检查每一列是否为数字dtype。 看↑ 您是否先初始化了一个空的DataFrame然后填充了它?如果是这样,这可能就是为什么它会像0.9之前的新版本一样更改的原因,将空

  • 问题内容: 我有2个数据框,我想将它们合并到一个公共列上。但是,我要合并的列不是同一字符串,而是另一个中包含一个字符串,如下所示: 我想要的结果如下: 问题答案: 新答案 这是一种基于pandas / numpy的方法。 旧答案 这是左联接行为的一种解决方案,因为它不会保留不匹配任何值的值。这比上面的numpy / pandas解决方案要慢,因为它使用两个嵌套循环来构建python列表。