这看起来本质上是一个简单的任务,但我发现从整个数据框中删除
*
并返回每列中的数值(包括没有 *
的数字)非常困难。数据框包含数百个列,简而言之如下:
Time A1 A2
2.0002546296 1499 1592
2.0006712963 1252 1459
2.0902546296 1731 2223
2.0906828704 1691 1904
2.1742245370 2364 3121
2.1764699074 2096 1942
2.7654050926 *7639* *8196*
2.7658564815 *7088* *7542*
2.9048958333 *8736* *8459*
2.9053125000 *7778* *7704*
2.9807175926 *6612* *6593*
3.0585763889 *8520* *9122*
我还没有编写它来迭代 df 中的每一列,但就第一列而言,我已经想出了这个
df['A1'].str.replace('*','').astype(float)
产生
0 NaN
1 NaN
2 NaN
3 NaN
4 NaN
5 NaN
6 NaN
7 NaN
8 NaN
9 NaN
10 NaN
11 NaN
12 NaN
13 NaN
14 NaN
15 NaN
16 NaN
17 NaN
18 NaN
19 7639.0
20 7088.0
21 8736.0
22 7778.0
23 6612.0
24 8520.0
有没有一种非常简单的方法可以删除 Pandas 数据框中的
*
?
使用适用于整个数据框的replace:
df
Out[14]:
Time A1 A2
0 2.000255 1499 1592
1 2.176470 2096 1942
2 2.765405 *7639* *8196*
3 2.765856 *7088* *7542*
4 2.904896 *8736* *8459*
5 2.905312 *7778* *7704*
6 2.980718 *6612* *6593*
7 3.058576 *8520* *9122*
df=df.replace('\*','',regex=True).astype(float)
df
Out[16]:
Time A1 A2
0 2.000255 1499 1592
1 2.176470 2096 1942
2 2.765405 7639 8196
3 2.765856 7088 7542
4 2.904896 8736 8459
5 2.905312 7778 7704
6 2.980718 6612 6593
7 3.058576 8520 9122
我发现 CuriousCoder 的答案如此简短且有用,但必须有一个
')'
而不是 ']'
所以应该是:
df['A1'].replace(regex=True, inplace=True, to_replace=r'[^0-9.\-]',
value=r''] df['A1'] = df['A1'].astype(float64)
我发现这是一个简单的方法 - 使用
replace
仅保留数字(以及 dot
和 minus
符号)。
这将删除字符、字母或
to_replace
属性中未定义的任何内容。
所以,解决办法是:
df['A1'].replace(regex=True, inplace=True, to_replace=r'[^0-9.\-]', value=r'')
df['A1'] = df['A1'].astype(float64)
还有另一种解决方案,使用map和strip函数。 你可以看到下面的链接: Pandas DataFrame:从列中的字符串中删除不需要的部分。
df =
Time A1 A2
0 2.0 1258 *1364*
1 2.1 *1254* 2002
2 2.2 1520 3364
3 2.3 *300* *10056*
cols = ['A1', 'A2']
for col in cols:
df[col] = df[col].map(lambda x: str(x).lstrip('*').rstrip('*')).astype(float)
df =
Time A1 A2
0 2.0 1258 1364
1 2.1 1254 2002
2 2.2 1520 3364
3 2.3 300 10056
解析过程仅应用于所需的列。
使用剥离功能 df['A1'] = df['A1'].str.strip("*")
如果您只想从左侧删除,请使用 lstrip;如果您想从右侧删除,请使用 rstrip df['A1'] = df['A1'].str.lstrip("") df['A1'] = df['A1'].str.rstrip("") 您可以一次删除不同的字符 例如: df['A1'] = df['A1'].str.strip("*/&")