我的数据类型是pandas.core.series.Series
。有两列。我想从其中拆分一个
V1 V2
1000 1 2 3
1001 0 2
至
1000 \t 1 \t 2 \t 3
1001 \t 0 \t 2
我试过的
1.
list(result.columns.values)
result[list(result.columns.values)].str.split(' ').replace('/t')
2.
result['labels'].split(' ', expand=True)
3.
c = str(result['labels'])
c.split(' ')
我尝试了其他方法,例如使用
awk
或正则表达式。不幸的是,我不敢相信我没有在doc或stackoverflow上找到答案。注意:变量数量增加!
最佳答案
如果列string
的类型是astype
,然后是V1
或int
,则可以同时合并两个列并通过replace
强制转换为str.replace
:
print df
V1 V2
0 1000 1 2 3
1 1001 0 2
s = df['V1'].astype(str) + ' ' + df['V2']
print s.replace('\s+', r'\t')
0 1000 1 2 3
1 1001 0 2
dtype: object
print s.str.replace('\s+', r'\t')
0 1000\t1\t2\t3
1 1001\t0\t2
dtype: object
也许您需要先
split
然后再join
'\t'
:print df
V2
V1
1000 1 2 3
1001 0 2
df1 = df['V2'].str.split('\s+', expand=True)
print df1
0 1 2
V1
1000 1 2 3
1001 0 2 None
df1 = df1.fillna('').reset_index()
df1['V1'] = df1['V1'].astype(str)
df1 = df1.T.apply('\t'.join)
df1 = df1.str.strip('\t')
print df1
0 1000\t1\t2\t3
1 1001\t0\t2
dtype: object