如何根据python中的条件更改多个dataframe列的数据类型?
我有一个80列的数据框,对于某些列,数据类型应该是整数,但python将它们视为浮点。我没有手动更改数据类型,而是尝试编写一个循环来标识列包含的数据类型,并相应地更改数据类型。我尝试了以下选项,但没有提供任何结果: 1) 我尝试将列作为变量,如果数据类型为float,则将其转换为整数 对于data1.columns中的x,如何根据python中的条件更改多个dataframe列的数据类型?,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个80列的数据框,对于某些列,数据类型应该是整数,但python将它们视为浮点。我没有手动更改数据类型,而是尝试编写一个循环来标识列包含的数据类型,并相应地更改数据类型。我尝试了以下选项,但没有提供任何结果: 1) 我尝试将列作为变量,如果数据类型为float,则将其转换为整数 对于data1.columns中的x,: 如果isinstance(数据1.列,浮点): data1[x]=data1[x].aType('int') 2) 我也试过这个 对于data1.columns中的x,:
:
如果isinstance(数据1.列,浮点):
data1[x]=data1[x].aType('int')
2) 我也试过这个
对于data1.columns中的x,:
如果x为持续(x,浮动):
data1=data1.astype(int)
其他:
打破
我的一般问题是,是否可以使用循环、条件、函数等更改列数据类型
在发布一个问题之前,我在网上研究了大多数关于更改单个列的数据类型的问题
提前感谢您的回答。使用:
df = pd.DataFrame({
'A':list('abcdef'),
'B':[4,5.,4,5,5,4],
'C':[7,8,9,4,2,3],
'D':[1.8,3.3,5,7,1,0],
'E':[5.0,3,6,9,2,4],
'F':list('aaabbb')
})
print (df)
A B C D E F
0 a 4.0 7 1.8 5.0 a
1 b 5.0 8 3.3 3.0 a
2 c 4.0 9 5.0 6.0 a
3 d 5.0 4 7.0 9.0 b
4 e 5.0 2 1.0 2.0 b
5 f 4.0 3 0.0 4.0 b
其思想是首先只过滤数字列,然后通过将转换的列与整数进行比较来获取所有整数和整数列(如浮点(0
在十进制之后),然后过滤所有匹配的列,过滤它们,创建字典并传递给
详细信息:
print (df1.eq(df1.astype(int)))
B C D E
0 True True False True
1 True True False True
2 True True True True
3 True True True True
4 True True True True
5 True True True True
print (df1.columns[df1.eq(df1.astype(int)).all()])
Index(['B', 'C', 'E'], dtype='object')
print (d)
{'B': 'int', 'C': 'int', 'E': 'int'}
如果要将所有浮点列设置为整数-循环解决方案:
for x in data1.columns:
if isinstance(data1[x].iat[0],float):
data1[x]=data1[x].astype(int)
print (data1)
A B C D E F
0 a 4 7 1 5 a
1 b 5 8 3 3 a
2 c 4 9 5 6 a
3 d 5 4 7 9 b
4 e 5 2 1 2 b
5 f 4 3 0 4 b
data1 = data1.astype(dict.fromkeys(data1.select_dtypes(np.floating), 'int'))
print (data1)
A B C D E F
0 a 4 7 1 5 a
1 b 5 8 3 3 a
2 c 4 9 5 6 a
3 d 5 4 7 9 b
4 e 5 2 1 2 b
5 f 4 3 0 4 b
非循环解决方案:
for x in data1.columns:
if isinstance(data1[x].iat[0],float):
data1[x]=data1[x].astype(int)
print (data1)
A B C D E F
0 a 4 7 1 5 a
1 b 5 8 3 3 a
2 c 4 9 5 6 a
3 d 5 4 7 9 b
4 e 5 2 1 2 b
5 f 4 3 0 4 b
data1 = data1.astype(dict.fromkeys(data1.select_dtypes(np.floating), 'int'))
print (data1)
A B C D E F
0 a 4 7 1 5 a
1 b 5 8 3 3 a
2 c 4 9 5 6 a
3 d 5 4 7 9 b
4 e 5 2 1 2 b
5 f 4 3 0 4 b
当你运行建议的代码时会发生什么?你能为可读性设置代码格式吗?很抱歉,我没有注意到代码被弄乱了,我编辑了它。感谢你的建议,数据是我们进行的一项家庭级调查,目的是测量新冠病毒-19对难民家庭的财务影响。我曾考虑过过滤数字列,但我不希望创建另一个数据帧,更改数据类型,然后在可能创建循环的情况下与原始数据帧合并。@AlperenAıkol-Hmmm,那么您需要循环吗?原因是什么?因为在中国,熊猫真的不被推荐@jezael这不一定是需要的,我试图用循环来解决这个问题,因为我不想为40多个列创建字典,但在阅读了你指出的帖子后,我决定坚持建议的解决方案。很抱歉回复太晚,我检查了代码它解决了我的问题谢谢你,伙计。我只有一个问题,你介绍了iat[0]它到底做什么?@AlperenAıkol-它获取列的第一个值并检查是否浮点