删除pandas datafram中的特殊字符

2024-06-08 16:10:42 发布

您现在位置:Python中文网/ 问答频道 /正文

这似乎是一项天生简单的任务,但我发现很难从整个数据帧中删除“”,并返回每列中的数值,包括没有“”的数字。dateframe还包含数百列,简而言之如下:

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

有没有一种非常简单的方法可以删除熊猫数据框中的“*”?


Tags: 数据方法a2dftimea1数字nan
2条回答

我发现这是一个简单的方法-使用replace只保留数字(和dotminus符号) 这将删除字符、字母或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: remove unwanted parts from strings in a column.

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

解析过程只应用于所需的列。

相关问题 更多 >