Pandas 合并城市和州名称字符串

4

我有一个数据框,其中包含一个 locations 列,该列包含城市和州的字符串。我想将城市和州连接起来。

0       Seattle, WA,Portland, OR,Everett, WA,Oklahoma ...
1       Silver Spring, MD,Portland, OR,Everett, WA,Den...
2       Oklahoma City, OK,Kingston, WA,Gardner, MA,Tul...
3       Portland, OR,Oklahoma City, OK,Eugene, OR,Corv...
4       Silver Spring, MD,Seattle, WA,Everett, WA,Spok...
3241    Seattle, WA,Silver Spring, MD,Portland, OR,Okl...

从SO的研究中,我发现推荐分割并将它们重新组合在一起。然而,我无法让join/zip正常工作。

test_df['locations'].str.split(',')

以下是我通过赋值尝试的内容:

' '.join, zip(test_df['locations'][0::2], test_df['locations'][1::2])

期望输出结果:

0       ['Seattle, WA','Portland, OR', 'Everett, WA', 'Oklahoma City, OK']
1       ['Silver Spring, MD', 'Portland, OR', 'Everett, WA', 'Denver, CO']
...
1个回答

3

设置:

df = pd.DataFrame({'locations': {0: 'Seattle, WA,Portland, OR,Everett, WA',
  1: 'Silver Spring, MD,Portland, OR,Everett, WA',
  2: 'Oklahoma City, OK,Kingston, WA,Gardner, MA',
  3: 'Portland, OR,Oklahoma City, OK,Eugene, OR',
  4: 'Silver Spring, MD,Seattle, WA,Everett, WA',
  3241: 'Seattle, WA,Silver Spring, MD,Portland, OR'}})

解决方案:

如果位置的固定模式是有 n 对“城市,州”的格式,可以按照以下方法完成:

import numpy as np
(
    df.locations.str.split(',')
    .dropna()
    .apply(lambda x: x+[''] if len(x)%2 != 0 else x)
    .apply(lambda x: [','.join(e) for e in np.asarray(x).reshape(-1,2)])
    .tolist()
)

[['Seattle, WA', 'Portland, OR', 'Everett, WA'],
 ['Silver Spring, MD', 'Portland, OR', 'Everett, WA'],
 ['Oklahoma City, OK', 'Kingston, WA', 'Gardner, MA'],
 ['Portland, OR', 'Oklahoma City, OK', 'Eugene, OR'],
 ['Silver Spring, MD', 'Seattle, WA', 'Everett, WA'],
 ['Seattle, WA', 'Silver Spring, MD', 'Portland, OR']]

这是不是期望的输出。 - ansev
这是一个显示问题。我已经将其更改为列表,看起来更好。 - Allen Qin
谢谢您的建议。但是,我使用这个代码会出现“ValueError: cannot reshape array of size 1 into shape (2)” 的错误。我猜想这与您的解决方案中的n对有关? - tlk27
很可能有一些地方没有城市或州。我已经更新了答案来处理这个问题。 - Allen Qin
1
那就是问题所在。感谢你的帮助! - tlk27

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接