拆分列并使用pandas命名它们

时间:2015-01-31 20:10:27

标签: python pandas

我想根据分隔符":"将列拆分为3,我能够做到 使用下面的代码。但现在想要改变分裂的名称 默认值为1,2,3,4的列。请告诉我如何做到这一点。

from pandas import *
df = DataFrame(
     {'CustomerName' : ["Paul", "John"], 'Seatblocks' : ["2:218:10:4,6","2:218:10:4,6"]}); 
df

df.join(df.Seatblocks.apply(lambda x: Series(x.split(':'))))

4 个答案:

答案 0 :(得分:3)

人们已经采用了rename方法,但如果你避免将所有东西塞进一行,我会发现这些东西更容易。有框架后,您只需分配到.columns

即可
>>> sb = df.Seatblocks.str.split(":").apply(pd.Series)
>>> sb.columns = ["a", "Three Digit", "??", "coord"]
>>> pd.concat([df, sb], axis=1)
  CustomerName    Seatblocks  a Three Digit  ?? coord
0         Paul  2:218:10:4,6  2         218  10   4,6
1         John  2:218:10:4,6  2         218  10   4,6

第一行只是(df.Seatblocks.apply(lambda x: Series(x.split(':'))))的一个版本,它利用了矢量化字符串操作访问器.strdocs)。

答案 1 :(得分:1)

列重命名为A,B,C,D。

from pandas import *
df = DataFrame(
     {'CustomerName' : ["Paul", "John"], 'Seatblocks' : ["2:218:10:4,6","2:218:10:4,6"]}); 
df = df.join(df.Seatblocks.apply(lambda x: Series(x.split(':'))))
df.rename(columns={0: 'A', 1: 'B', 2: 'C', 3: 'D'}, inplace=True)
df

答案 2 :(得分:1)

只需rename他们:

df.rename(columns={0:'col_1', 1:'col_2', 2:'col_3', 3:'col_4'},inplace=True)

一个更加模糊的方法是将新名称组合成列的前2个元素并直接指定:

In [14]:

df.columns = df.columns[:2] | pd.Index(['col_1', 'col_2', 'col_3', 'col_4'])
df
Out[14]:
  CustomerName    Seatblocks col_1 col_2 col_3 col_4
0         Paul  2:218:10:4,6     2   218    10   4,6
1         John  2:218:10:4,6     2   218    10   4,6

答案 3 :(得分:0)

您可以修改df.column以获取新列名称

In [1]: from pandas import *

In [2]: df = DataFrame(
   ...:      {'CustomerName' : ["Paul", "John"], 'Seatblocks' : ["2:218:10:4,6","2:218:10:4,6"]}); 

In [3]: df2 = df.join(df.Seatblocks.apply(lambda x: Series(x.split(':'))))

In [4]: names = ['foo', 'bar', 'baz', 'booz']

In [5]: df2.columns = [x if str(x).isalpha() else names.pop() for x in df2.columns]

In [6]: df2.columns                                              
Out[6]: Index([u'CustomerName', u'Seatblocks', u'booz', u'baz', u'bar', u'foo'], dtype='object')

In [7]: