关于此错误,有很多问题,但是环顾四周之后,我仍然无法找到解决方案的想法。我正在尝试使用字符串旋转数据框架,以使一些行数据变为列,但到目前为止还没有解决。
我的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:没有要聚合的数字类型
用字符串值旋转数据框的方法是什么?
aggfunc
in的默认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_answer
值question
。该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列表。