我有一个熊猫数据框,其中的列包含门牌号和后缀。门牌号和后缀以“-”分隔,尽管许多后缀也包含“-”。
我已经尝试过了:
df house_nr(x):
y = x['house_nr'].split('-', maxsplit = 1)
return y
df['suffix'] = df.apply(house_nr, axis=1)
收到以下错误:
KeyError: ('house_nr', 'occurred at index 0')
经过一些其他尝试,我可以正常工作了:
df2 = pd.DataFrame(df['house_nr'].str.split('-',1).tolist(),columns = ['house-number','suffix'])
然后我加入了数据框,但我认为这种解决方案不是很好的方法或pythonic。
答案 0 :(得分:2)
设置
df = pd.DataFrame({'house_nr': ['123-Rd-thing', '456-House', '567-House-thing']})
house_nr
0 123-Rd-thing
1 456-House
2 567-House-thing
使用列表推导和split
,它将比pandas字符串方法快:
pd.DataFrame([i.split('-', 1) for i in df.house_nr], columns=['num', 'suffix'])
num suffix
0 123 Rd-thing
1 456 House
2 567 House-thing
答案 1 :(得分:2)
from numpy.core.defchararray import split
a = df.house_nr.values.astype(str)
pd.DataFrame(
split(a, '-', 1).tolist(),
df.index, ['house-number', 'suffix'])
house-number suffix
0 123 Rd-thing
1 456 House
2 567 House-thing
from numpy.core.defchararray import split
cols = ['house-number', 'suffix']
a = df.house_nr.values.astype(str)
pd.DataFrame(dict(zip(cols, zip(*(split(a, '-', 1))))), df.index)
house-number suffix
0 123 Rd-thing
1 456 House
2 567 House-thing
(我将还给我)
df = pd.DataFrame({'house_nr': ['123-Rd-thing', '456-House', '567-House-thing']})
答案 2 :(得分:1)
对expand=True
使用n=1
和str.split
参数。 expand=True
为拆分创建新列,n=1
将拆分限制为第一次出现-
>>> df
col
0 5-suffix-1
1 6-suffix-2
df[['house_number','suffix']] = df['col'].str.split('-', n=1, expand=True)
>>> df
col house_number suffix
0 5-suffix-1 5 suffix-1
1 6-suffix-2 6 suffix-2