将一列字符串转换为字符列

时间:2018-03-08 17:04:49

标签: python pandas dataframe

我在它包含的pandas中导入了CSV文件,1列和25000行,我想将此文件转换为新的数据帧样本数据:

1列4行:

           ABC
           122
           678
           abc 

我想用列表(ABC)的每个元素创建DataFrame作为行列,然后是其他行,如下所示:

           A  B  C
           1  2  2
           6  7  8
           a  b  c

如何执行此任务,我是编程新手。

2 个答案:

答案 0 :(得分:0)

选项1
直接解决方案改变view

pd.DataFrame(
    df.values.astype(str).view('<U1'), columns=list(df.columns[0])
)
   A  B  C
0  1  2  2
1  6  7  8
2  a  b  c

请注意,所有结果列现在都是字符串。以下是它在性能方面的表现:

df = pd.concat([df] * 100000, ignore_index=True)

%timeit pd.DataFrame(
    df.values.astype(str).view('<U1'), columns=list(df.columns[0])
)
122 ms ± 3.17 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)

选项2
使用extractall + unstack

的替代方案较慢
df.ABC.str.extractall('(.)')[0].unstack().rename(
     columns=dict(enumerate('ABC'))
)

match  A  B  C
0      1  2  2
1      6  7  8
2      a  b  c

选项3
还有一个列表理解:

pd.DataFrame([list(x) for x in df.ABC.astype(str)], columns=list('ABC'))

   A  B  C
0  1  2  2
1  6  7  8
2  a  b  c

答案 1 :(得分:0)

另一种方式是

In [131]: pd.DataFrame(df.ABC.apply(list).tolist(), columns=list(df.columns[0]))
Out[131]:
   A  B  C
0  1  2  2
1  6  7  8
2  a  b  c