如何使用多种数据类型在Pandas中转换列?

时间:2017-09-21 08:11:37

标签: python pandas

我有一个带有混合数据类型的ID列,当我转动时会导致问题。我有一些ID作为浮点类型,所以当我尝试将它们转换为整数,然后转换为字符串。如果我将列作为一个整体进行转换,则字符串子集会抛出错误,因为将字符串转换为int是不合逻辑的。

我也知道在迭代列时改变数据类型是一个坏主意。有没有人有任何想法?

这是一个直观的表示:

ID

  1. Str
  2. Int
  3. 尝试将它们全部转换为字符串。此外,希望浮点数的“.0”结尾不在那里。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

假设你有一个由整数,浮点数和字符串组成的列,它们都是作为文件中的字符串读入的,你将会有这样的结论:

s = pd.Series(['10', '20', '30.4', '40.7', 'text', 'more text', '50.0'])

在这种情况下,您可以应用函数将浮点数转换为整数,然后使用第二个函数将整数(返回)转换为字符串:

import pandas as pd

def print_type(x):
    print(type(x))
    return x

def to_int(x):
    try:
        # x is a float or an integer, and will be returned as an integer
        return int(pd.to_numeric(x))
    except ValueError:
        # x is a string
        return x

def to_str(x):
    return str(x)

s = pd.Series(['10', '20', '30.4', '40.7', 'text', 'more text', '50.0'])

s2 = s.apply(to_int).apply(to_str)

print("Series s:")
print(s)
print("\nSeries s2:")
print(s2)
print("\nData types of series s2:")
print(s2.apply(print_type))

这是输出,显示最后每个数字都已转换为整数的字符串版本:

Series s:
0           10
1           20
2         30.4
3         40.7
4         text
5    more text
6         50.0
dtype: object

Series s2:
0           10
1           20
2           30
3           40
4         text
5    more text
6           50
dtype: object

Data types of series s2:
<class 'str'>
<class 'str'>
<class 'str'>
<class 'str'>
<class 'str'>
<class 'str'>
<class 'str'>
0           10
1           20
2           30
3           40
4         text
5    more text
6           50
dtype: object

不确定这是否属于您之后的情况,但如果没有,希望它能让您了解如何开始使用。这是使用Pandas 0.19.2:

In [1]: import pandas as pd

In [2]: print(pd.__version__)
0.19.2