使用for循环转换多列的数据类型

pra*_*ner 3 python numpy pandas

我有一个21840x39数据框。我的一些列是有数值的,我想确保它们都在相同的位置data type(我希望是一个float)。

而不是命名所有列并转换它们:

df[['A', 'B', 'C', '...]] = df[['A', 'B', 'C', '...]].astype(float)

Run Code Online (Sandbox Code Playgroud)

我可以做一个for loop允许我说“从第 18 列转换为浮点到第 35 列”之类的话吗

我知道如何做一栏:df['A'] = df['A'].astype(float)

但我怎样才能做多列呢?我尝试在循环内进行列表切片,但无法正确执行。

jez*_*ael 5

第一个想法是转换选定的列,python 从 开始计数0,因此对于18 to 36列使用:

df.iloc[:, 17:35] = df.iloc[:, 17:35].astype(float)
Run Code Online (Sandbox Code Playgroud)

如果不起作用(因为可能存在错误),请使用另一种解决方案:

df = df.astype(dict.fromkeys(df.columns[17:35], float))
Run Code Online (Sandbox Code Playgroud)

示例- 将第 8 列转换为第 15 列:

np.random.seed(2020)
df = pd.DataFrame(np.random.randint(10, size=(3, 18)),
                  columns=list('abcdefghijklmnopqr')).astype(str)
print (df)
   a  b  c  d  e  f  g  h  i  j  k  l  m  n  o  p  q  r
0  0  8  3  6  3  3  7  8  0  0  8  9  3  7  2  3  6  5
1  0  4  8  6  4  1  1  5  9  5  6  6  6  5  4  6  4  2
2  3  4  7  1  4  9  3  2  0  9  1  2  7  1  0  2  8  8

df = df.astype(dict.fromkeys(df.columns[7:15], float))
print (df)
   a  b  c  d  e  f  g    h    i    j    k    l    m    n    o  p  q  r
0  0  8  3  6  3  3  7  8.0  0.0  0.0  8.0  9.0  3.0  7.0  2.0  3  6  5
1  0  4  8  6  4  1  1  5.0  9.0  5.0  6.0  6.0  6.0  5.0  4.0  6  4  2
2  3  4  7  1  4  9  3  2.0  0.0  9.0  1.0  2.0  7.0  1.0  0.0  2  8  8
Run Code Online (Sandbox Code Playgroud)