我需要将数据类型对象的所有列转换为字符串。
为简单起见,这里是列标题:
keys= [Name, Age, Passport, Date, Location, Height]
'名称'和'位置'属于对象类型。我需要确定这些列是object类型,并将列转换为字符串。
我尝试写的循环:
while variable_1 < len(keys):
if df[variable_1].dtypes == object:
df[variable_1] = df[variable_1].astype(str)
variable_1 = variable_1 + 1
这是一个明显的错误,我有点卡在语法上。
答案 0 :(得分:3)
我不确定你为什么要这样做,但这是如何:
object_columns = (df.dtypes == numpy.object)
df.loc[:, object_columns] = df.loc[:, object_columns].astype(str)
如果您曾在熊猫中使用过循环,那么99%肯定会做错了。
答案 1 :(得分:2)
考虑数据框df
df = pd.DataFrame(dict(
A=[1, 2, 3],
B=[[1], [2], [3]],
C=['1', '2', '3'],
D=[1., 2., 3.]))
将applymap
与type
一起使用,以查看每个元素的类型。
df.applymap(type)
A B C D
0 <class 'int'> <class 'list'> <class 'str'> <class 'float'>
1 <class 'int'> <class 'list'> <class 'str'> <class 'float'>
2 <class 'int'> <class 'list'> <class 'str'> <class 'float'>
使用select_dytpes
只获取object
列,update
更新数据框
df.update(df.select_dtypes(include=[np.object]).astype(str))
df.applymap(type)
A B C D
0 <class 'int'> <class 'str'> <class 'str'> <class 'float'>
1 <class 'int'> <class 'str'> <class 'str'> <class 'float'>
2 <class 'int'> <class 'str'> <class 'str'> <class 'float'>
答案 2 :(得分:1)
您使用while
的原因?而不是简单地使用for
?
for i in df.columns:
if df[i].dtype==object:
df[i]= df[i].astype(str)