还有其他类似的问题,但不同之处在于我的数据框已经有很多列,其中只有一列需要拆分。
我有一个大型数据帧(数百列,数百万行)。当在字符串中找到一个字符(" |")时,我想拆分其中一列。
所有值只有一个" |"。
对于固定长度,我会这样做: df [' StateInitial'] = df [' state']。str [:2]
我希望我可以用string.index(" |")替换2,但是如何调用字符串?
答案 0 :(得分:6)
怎么样:
df = pd.DataFrame(['a|b', 'c|d'])
s = df[0].apply(lambda x: x.split('|'))
df['left'] = s.apply(lambda x: x[0])
df['right'] = s.apply(lambda x: x[1])
输出:
0 left right
0 a|b a b
1 c|d c d
答案 1 :(得分:1)
这是一个基于@santon提供的答案的单线:
df['left'],df['right'] = zip(*df[0].apply(lambda x: x.split('|')))
>>> df
0 left right
0 a|b a b
1 c|d c d
答案 2 :(得分:0)
首先,将新列值设置为等于旧列值。
接下来,创建一个新列,其值最初等于None。
现在,使用第一个有效值更新新列。
df['new_col1'] = df['old_col']
df['new_col2'] = None
df['new_col2'].update(df.new_col1.apply(lambda x: x.str.split('|')[1]
if len(x.str.split()) == 2 else None))
答案 3 :(得分:0)
如果您有一列字符串,请使用定界符“ |”您可以使用以下行拆分列:
df['left'], df['right'] = df['combined'].str.split('|', 1).str
LeoRochael对如何在单独的线程上进行工作进行了深入的深入解释:https://stackoverflow.com/a/39358924/11688667