我有一些数据是从另一个系统预填充的,其数据帧如下所示:
id;value
101;Product_1,,,,,,,,,,,,,,,,,,,,,,,Product_2,,,,,,,,,,,,,,,,,,,,,,, Product_3,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan, Product_4,None,None,None,None,None,None,None,None,None,None,None,None,None,None,None,None,None,None,None,None,None,None
102;,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,None,None,None,None,None,None,None,None,None,None,None,None,None,None,None,None,None,None,None,None,None,None,None
我正在尝试清理它,以便我删除所有具有 2 个或更多逗号 (,( 连续为空白的值。预期输出:
id; value
101; Product_1, Product_2, Product_3, Product_4
102;
使用分号 (;) 标识分隔符
首先,导入数据,同时将分隔符指定为分号。 然后,您可以运行str.replace()
来折叠逗号。 实际上,您要执行三种替换。
- 将空值(和空格(替换为 ', '
- 将逗号序列替换为单个", ">
- 要处理空单元格,请添加最后一个
replace
。 我已将其指定为留空",但出于许多目的,将其替换为numpy.nan
会更有用。
import pandas as pd
df = pd.read_csv(path, sep=';')
df['value'].str.replace(r'nan|None| ', '').str.replace(r',+', ', ').replace(', ', '')
- 您可能会发现使用列表而不是字符串很有用,在这种情况下,您可以使用:
df['value'].str.split(', ')