这是我的数据框
year
|0|0|0|0|2010|0|0|2018
|0|0|2017|0|0|2019
我尝试过此代码,但对我不起作用
df['year'] = df['year'].str.replace('|0|', ',')
我希望看到这样的结果
year
2010, 2018
2017, 2019
有什么建议吗?
答案 0 :(得分:5)
我建议提取所有长度为using namespace
和Series.str.findall
的数字,然后按4
和Series.str.join
进行连接:
,
需要删除df['year'] = df['year'].str.findall('\d{4}').str.join(', ')
print (df)
year
0 2010, 2018
1 2017, 2019
值的另一种解决方案:
0
答案 1 :(得分:0)
在Pandas系列中将数字数据存储为逗号分隔的字符串是一种反模式。您放弃矢量化计算的任何可能性。如果可行,请提取整数并添加多个数字系列:
# input dataframe
# df = pd.DataFrame({'year': ['|0|0|0|0|2010|0|0|2018', '|0|0|2017|0|0|2019']})
L = [list(filter(None, map(int, x.strip('|').split('|')))) for x in df['year']]
df = df.join(pd.DataFrame(pd.Series(L).values.tolist()))
print(df)
# year 0 1
# 0 |0|0|0|0|2010|0|0|2018 2010 2018
# 1 |0|0|2017|0|0|2019 2017 2019
请注意,filter(None, ...)
惯用语用于删除Falsy值,包括0
。