我有一个带有混合数据类型的ID列,当我转动时会导致问题。我有一些ID作为浮点类型,所以当我尝试将它们转换为整数,然后转换为字符串。如果我将列作为一个整体进行转换,则字符串子集会抛出错误,因为将字符串转换为int是不合逻辑的。
我也知道在迭代列时改变数据类型是一个坏主意。有没有人有任何想法?
这是一个直观的表示:
ID
尝试将它们全部转换为字符串。此外,希望浮点数的“.0”结尾不在那里。有什么想法吗?
答案 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