【问题标题】:how to split a string in python using DF.split如何使用 DF.split 在 python 中拆分字符串
【发布时间】:2019-03-15 10:13:40
【问题描述】:

对不起,如果这个问题已经被问过。我似乎无法在互联网上找到答案。

我有一个看起来像这样的 DF:

Positions=pd.DataFrame( {'position':rateQualityOutTrim['position'].unique() })
    Positions
                    position
0       CITI_52299G66_201210
1       CITI_52299G66_201210
2       CITI_52299G66_202374
3       CITI_52299G66_202734
4       CITI_52299G66_204130
5       CITI_52299G66_204685
6       CITI_52299G66_205140
7       CITI_52299G66_206425

new=Positions['position'].str.split(pat="_", n=2, expand=False)

new
0         [CITI, 52299G66, 201210]
1         [CITI, 52299G66, 201210]
2         [CITI, 52299G66, 202374]
3         [CITI, 52299G66, 202734]
4         [CITI, 52299G66, 204130]
5         [CITI, 52299G66, 204685]

我希望分别提取每个元素。

我用过这个:

Positions.position.apply(lambda x: x.split("_")[0])
0         CITI
1         CITI
2         CITI
3         CITI

Positions.position.apply(lambda x: x.split("_")[-1])
0        201210     
1        201210
2        202374
3        202734
4        204130
5        204685

中间的元素我很难提取它。欢迎任何帮助。谢谢

【问题讨论】:

  • Positions['position'].str.split("_").str[1] ?
  • 它不起作用,我担心它说“列表索引超出范围”

标签: python-3.x string pandas split


【解决方案1】:

使用str的索引:

df=Positions['position'].str.split(pat="_")
print (df)

0    [CITI, 52299G66, 201210]
1    [CITI, 52299G66, 201210]
2    [CITI, 52299G66, 202374]
3    [CITI, 52299G66, 202734]
4    [CITI, 52299G66, 204130]
5    [CITI, 52299G66, 204685]
6    [CITI, 52299G66, 205140]
7    [CITI, 52299G66, 206425]
Name: position, dtype: object

print (df.str[0])
print (df.str[1])
print (df.str[2])

或者创建新的DataFrame:

df = Positions['position'].str.split(pat="_", expand=True)
print (df)
      0         1       2
0  CITI  52299G66  201210
1  CITI  52299G66  201210
2  CITI  52299G66  202374
3  CITI  52299G66  202734
4  CITI  52299G66  204130
5  CITI  52299G66  204685
6  CITI  52299G66  205140
7  CITI  52299G66  206425

如果需要,选择每一列:

print (df[0])
print (df[1])
print (df[2])

【讨论】:

  • 创建一个新的 DF 会更好。非常感谢... PS:似乎第四列是用'None'创建的? 1 花旗 52299G66 201210 无 2 CITI 52299G66 202374 None 3 CITI 52299G66 202734 None 4 CITI 52299G66 204130 None 5 CITI 52299G66 204685 None 6 CITI 52299G66 205140 None
  • @SBad - 嗯,在某些数据中可能是 3_
  • 当然我会检查,但不管你的提议是否正常。谢谢楼主!
猜你喜欢
  • 2013-06-27
  • 2023-03-21
  • 1970-01-01
  • 2012-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-20
相关资源
最近更新 更多