pandas python中的类型转换AttributeError:“str”对象没有属性“astype”

isr3a4wc  于 2023-08-01  发布在  Python
关注(0)|答案(4)|浏览(208)

我对python panda中的类型转换感到困惑

df = pd.DataFrame({'a':['1.23', '0.123']})
type(df['a'])
df['a'].astype(float)

字符串
这里df是一个panda系列,它的内容是2个字符串,那么我可以在这个panda系列上应用astype(float),它可以正确地将所有字符串转换为浮点数。但是,

df['a'][1].astype(float)


显示属性错误:“string”对象没有“astype”属性。我的问题是:这怎么可能呢?我可以将整个序列从字符串转换为浮点型,但不能将该序列的项从字符串转换为浮点型?
另外,我加载了原始数据集

df['id'].astype(int)


它将生成ValueError:基数为10的int()的文字无效:“”这一条似乎表明我的df['id']中有一个空白。因此,我通过键入以下命令来检查它是否为真

'' in df['id']


它会显示“假”。所以我很困惑。

j9per5c4

j9per5c41#

df['a']返回一个Series对象,该对象使用astype作为将序列中的所有元素转换为另一个元素的矢量化方式。
df['a'][1]返回 Dataframe 中一个单元格的内容,在本例中为字符串'0.123'。现在返回一个str对象,该对象没有此函数。要转换它,请使用常规python指令:

type(df['a'][1])
Out[25]: str

float(df['a'][1])
Out[26]: 0.123

type(float(df['a'][1]))
Out[27]: float

字符串
对于第二个问题,运算符in在最后调用__contains__(以''作为参数),下面是运算符的文档字符串:

help(pd.Series.__contains__)
Help on function __contains__ in module pandas.core.generic:

__contains__(self, key)
    True if the key is in the info axis


这意味着in运算符搜索的是索引中的空字符串,而不是它的内容。
搜索空字符串的方法是使用等号运算符:

df
Out[54]: 
    a
0  42
1    

'' in df
Out[55]: False

df==''
Out[56]: 
       a
0  False
1   True

df[df['a']=='']
Out[57]: 
  a
1

xienkqul

xienkqul2#

df['a'][1]将返回数组中1的实际值,实际上是一个字符串。您可以使用float(df['a'][1])转换它。

>>> df = pd.DataFrame({'a':['1.23', '0.123']})
>>> type(df['a'])
<class 'pandas.core.series.Series'>
>>> df['a'].astype(float)
0    1.230
1    0.123
Name: a, dtype: float64
>>> type(df['a'][1])
<type 'str'>

字符串
对于第二个问题,可能您的原始数据有一个空值。正确的测试应该是:

>>> df = pd.DataFrame({'a':['1', '']})
>>> '' in df['a'].values
True


第二个问题的来源:https://stackoverflow.com/a/21320011/5335508

6kkfgxo0

6kkfgxo03#

data1 = {'age': [1,1,2, np.nan],
        'gender': ['m', 'f', 'm', np.nan],
        'salary': [2,1,2, np.nan]}

x = pd.DataFrame(data1)
for i in list(x.columns):
    print(type((x[i].iloc[1])))
    if isinstance(x[i].iloc[1], str):
        print("It is String")
    else:
        print('Not a String')

字符串

gdx19jrr

gdx19jrr4#

除了已经发布的解决方案,您还可以简单地用途:

df['a'].astype(float)[1]

字符串

相关问题