python - 在 Pandas 中将 float 转换为字符串

标签 python pandas

我对 Pandas 中的数据类型“object”有点困惑。 “对象”到底是什么?

我想将变量“SpT”(见下文)从对象更改为字符串。

> 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

为此,我执行以下操作:

df_cleaned['SpT'] = df_cleaned['SpT'].astype(str)

但这对 SpT 的 dtype 没有影响。

这样做的原因是当我执行以下操作时:

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]

我得到:

TypeError: object of type 'float' has no len()

因此,我相信如果我将“object”转换为“String”,我就会做我想做的事。

更多信息:这是 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

最佳答案

如果一列包含字符串或被视为字符串,它将具有 objectdtype(但不一定是反向的——更多内容见下文)。这是一个简单的例子:

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

如果一列只包含字符串,我们可以在其上应用 len,就像您所做的那样应该可以正常工作:

print df['num'].apply(lambda x: len(x))
#0    3
#1    3
#2    3

但是,对象的dtype 并不意味着它只包含字符串。例如,strange 列包含混合类型的对象——以及一些 str 和一个 float。应用函数 len 会引发类似于您所见的错误:

print df['strange'].apply(lambda x: len(x))
# TypeError: object of type 'float' has no len()

因此,问题可能是您没有将列正确转换为字符串,并且该列仍然包含混合对象类型。

继续上面的例子,让我们将 strange 转换为字符串并检查 apply 是否有效:

df['strange'] = df['strange'].astype(str)
print df['strange'].apply(lambda x: len(x))
#0    3
#1    3
#2    3

(在你的问题中,df_cleaneddf_clean 之间存在可疑的差异,是错别字还是代码中的错误导致了这个问题?)

关于python - 在 Pandas 中将 float 转换为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23158447/

相关文章:

python - 如何使用 cypher 获得一些大于 Neo4j 平均值的值?

python - 如何单击列表框中需要滚动到的元素?

python - 为什么多次调用小数据时 numpy.linalg.norm 变慢?

python - 相互绘制数据框列

python - 无法在 Azure 机器学习工作室中打开新的 Python 或 R 笔记本

python - 带变量的抽象矩阵乘法

python - Pandas groupby mean - 进入数据框?

python - 在 pandas for python 中创建虚拟变量

python - 添加来自不同数据框的值

sql - SQL或Pandas如何将一列拆分为多列,然后统计新列中的空值?