我对Pandas中的数据类型"object"感到困惑.究竟什么是"对象"?
我想将变量"SpT"(见下文)从object更改为String.
> df_cleaned.dtypes
Vmag float64
RA float64
DE float64
Plx float64
pmRA float64
pmDE float64
B-V float64
SpT object
M_V float64
distance float64
dtype: object
Run Code Online (Sandbox Code Playgroud)
为此我做了以下事情:
df_cleaned['SpT'] = df_cleaned['SpT'].astype(str)
Run Code Online (Sandbox Code Playgroud)
但这对SpT的类型没有影响.
这样做的原因是当我执行以下操作时:
f = lambda s: (len(s) >= 2) and (s[0].isalpha()) and (s[1].isdigit())
i = df_cleaned['SpT'].apply(f)
df_cleaned = df_cleaned[i]
Run Code Online (Sandbox Code Playgroud)
我明白了:
TypeError: object of type 'float' has no len()
Run Code Online (Sandbox Code Playgroud)
因此,我相信如果我将"对象"转换为"字符串",我会做我想做的事情.
更多信息:这就是SpT的样子:
HIP
1 F5
2 K3V
3 B9
4 F0V
5 G8III
6 M0V:
7 G0
8 M6e-M8.5e Tc
9 G5
10 F6V
11 A2
12 K4III
13 K0III
14 K0
15 K2
...
118307 M2III:
118308 K:
118309 A2
118310 K5
118312 G5
118313 F0
118314 K0
118315 K0III
118316 F2
118317 F8
118318 K2
118319 G2V
118320 K0
118321 G5V
118322 B9IV
Name: SpT, Length: 114472, dtype: object
Run Code Online (Sandbox Code Playgroud)
YS-*_*S-L 21
如果列中包含字符串或被视为字符串,就会产生dtype的object(但不一定是真的落后-详见下文).这是一个简单的例子:
import pandas as pd
df = pd.DataFrame({'SpT': ['string1', 'string2', 'string3'],
'num': ['0.1', '0.2', '0.3'],
'strange': ['0.1', '0.2', 0.3]})
print df.dtypes
#SpT object
#num object
#strange object
#dtype: object
Run Code Online (Sandbox Code Playgroud)
如果一个列只包含字符串,我们就可以len像你所做的那样应用它应该正常工作:
print df['num'].apply(lambda x: len(x))
#0 3
#1 3
#2 3
Run Code Online (Sandbox Code Playgroud)
但是,dtype对象的一个并不意味着它只包含字符串.例如,该列strange包含具有混合类型的对象 - 以及一些str和一个float.应用该函数len将引发类似于您所看到的错误:
print df['strange'].apply(lambda x: len(x))
# TypeError: object of type 'float' has no len()
Run Code Online (Sandbox Code Playgroud)
因此,问题可能是您没有将列正确转换为字符串,并且该列仍包含混合对象类型.
继续上面的例子,让我们转换strange为字符串并检查是否apply有效:
df['strange'] = df['strange'].astype(str)
print df['strange'].apply(lambda x: len(x))
#0 3
#1 3
#2 3
Run Code Online (Sandbox Code Playgroud)
(之间有一个可疑的差异df_cleaned并df_clean没有在你的问题,它是一个错字或导致该问题的代码错了吗?)
| 归档时间: |
|
| 查看次数: |
50052 次 |
| 最近记录: |