我想从 pandas 数据框中的列中删除字符。我有大约 10 列,每列都有字符。请参阅示例栏。列类型是字符串,想删除字符并将列转换为int float
10.2\I
10.1\Y
NAN
12.5\T
13.3\T
9.4\J
NAN
12.2\N
NAN
11.9\U
NAN
12.4\O
NAN
8.3\U
13.5\B
NAN
13.1\V
11.0\Q
11.0\X
8.200000000000001\U
NAN
13.1\T
8.1\O
9.4\N
我想删除“\”和所有字母并将其变成 float 。我不想更改 NAN。
我使用了df[column name'] = df.str[:4]
- 它删除了一些单元格,但不是所有单元格。另外,无法转换为 float ,因为我收到错误
df[column name'] = df.str[:4]
df['column name'].astype(float)
0 10.2
1 10.1
2 NaN
3 12.5
4 13.3
5 9.4\
6 8.3\
22 8.1\
27 9.4\
28 NaN
29 10.6
30 10.8
31 NaN
32 7.3\
33 9.8\
34 NaN
35 12.4
36 8.1\
它仍然没有转换其他单元格
当我尝试转换为 float 时出现错误
ValueError: could not convert string to float: '10.2\I'
最佳答案
我可以看出您的代码不起作用的两个原因:
- 使用
[:4]
并不适用于示例中的所有值,因为小数点之前(显然是小数点之后)的位数各不相同。 - 在
df['column name'] = df.str[:4]
赋值中,等号右侧需要有相同的列标识符。
这是一个包含示例数据框的解决方案,我使用两个缩写列(如您的示例中所示)准备。它使用 [:-2]
从右侧截断每个值,然后用原始 NAN 替换剩余的 N,然后再转换为 float 。
import pandas as pd
col = pd.Series(["10.2\I","10.1\Y",'NAN','12.5\T'])
col2 = pd.Series(["11.0\Q","11.0\X",'NAN',r'8.200000000000001\U'])
df = pd.concat([col,col2],axis=1)
df.rename(columns={0:'col1',1:'col2'},inplace=True)
df
col1 col2
0 10.2\I 11.0\Q
1 10.1\Y 11.0\X
2 NAN NAN
3 12.5\T 8.200000000000001\U
#apply the conversion to all columns in the dataframe
for col in df:
df[col] = df[col].str[:-2].replace('N','NAN').astype(float)
df
col1 col2
0 10.2 11.0
1 10.1 11.0
2 NaN NaN
3 12.5 8.2
关于python - 如何从 pandas 数据框中的多列中删除字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55437462/