Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何更改熊猫中数据帧行的数据类型?_Python - Fatal编程技术网

Python 如何更改熊猫中数据帧行的数据类型?

Python 如何更改熊猫中数据帧行的数据类型?,python,Python,我正在进行API调用,并将结果收集为DataFrame对象中的行。前两行是文本,其余是数字。是否有任何方法可以在每个列中使用不同的数据类型,或者说不同的方式,我们可以为每个行设置一个数据类型?我已经尝试转换_对象,astype等。在添加到数据帧之前转换行,但它们不起作用 Example: Sample DataFrame 0 1 2 0 text1 text2 text3 1 text1 text2 text3 2 no1 no2 no3 ... 不,不可

我正在进行API调用,并将结果收集为DataFrame对象中的行。前两行是文本,其余是数字。是否有任何方法可以在每个列中使用不同的数据类型,或者说不同的方式,我们可以为每个行设置一个数据类型?我已经尝试转换_对象,astype等。在添加到数据帧之前转换行,但它们不起作用

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))