Python 如何更改熊猫中数据帧行的数据类型?
我正在进行API调用,并将结果收集为DataFrame对象中的行。前两行是文本,其余是数字。是否有任何方法可以在每个列中使用不同的数据类型,或者说不同的方式,我们可以为每个行设置一个数据类型?我已经尝试转换_对象,astype等。在添加到数据帧之前转换行,但它们不起作用Python 如何更改熊猫中数据帧行的数据类型?,python,Python,我正在进行API调用,并将结果收集为DataFrame对象中的行。前两行是文本,其余是数字。是否有任何方法可以在每个列中使用不同的数据类型,或者说不同的方式,我们可以为每个行设置一个数据类型?我已经尝试转换_对象,astype等。在添加到数据帧之前转换行,但它们不起作用 Example: Sample DataFrame 0 1 2 0 text1 text2 text3 1 text1 text2 text3 2 no1 no2 no3 ... 不,不可
Example: Sample DataFrame
0 1 2
0 text1 text2 text3
1 text1 text2 text3
2 no1 no2 no3
...
不,不可能。稍微简单一点,您可以将
DataFrame
看作是一个类似于s的列dict
,这些都是同质类型的
你写
这就是我收集API调用结果的方式。修复列和追加行比不断增加列和修复行更健壮
给定这种使用模式和类型,您可能会考虑数据Frasrm是否适合您。根据我的经验,对于动态逐行追加,数据帧的性能非常糟糕。您可以考虑使用常规Python <代码> DATT <代码> >和<代码>列表> <代码> s集合,然后以某种方式处理数据并将其粘贴到<代码>数据文件中。
< P>示例>>> import pandas as pd
>>> df = pd.DataFrame([['txt1','txt2'], [12, 22]], columns=['c1', 'c2'])
>>> df
c1 c2
0 txt1 txt2
1 12 22
行是一个对象:
>>> df.iloc[0]
c1 txt1
c2 txt2
Name: 0, dtype: object
>>> df.iloc[1]
c1 12
c2 22
Name: 1, dtype: object
每个单元格取决于您在其中输入的值:
>>> df.iloc[0]['c2']
'txt2'
>>> type(df.iloc[0]['c2'])
<type 'str'>
>>> df.iloc[1]['c2']
22
>>> type(df.iloc[1]['c2'])
<type 'int'>
考虑到您正在收集API调用的结果,很可能您应该将结果存储为元组列表作为中间步骤,而不是附加到
数据帧中。这应该会产生你想要的结果
def api_call(x):
return 5.0, 'a', 42
df = pandas.DataFrame(map(api_call, args))
注意,如果您使用的是Python2.x,请使用itertools.imap
而不是map
作为旁注,添加行比添加列更可靠的评论令人难以置信DataFrame.transpose()
使这一区别变得无关紧要。对不起,为什么要使用不同数据类型的列?@WoodChopper这就是我收集API调用结果的方式。修复列和追加行比不断增加列和修复行更健壮。甚至,我也这么认为。在R中,即使我们提供不同的数据类型,这种情况也会在数据帧中发生。它将值强制为一种类型。@WoodChopper如果我理解正确,这里也会发生这种情况。足够多的异构值将有效地使类型对象
,这是尽可能通用的。
def api_call(x):
return 5.0, 'a', 42
df = pandas.DataFrame(map(api_call, args))