Pandas将列表附加到列名列表

时间:2015-06-19 09:04:43

标签: python-2.7 pandas

我正在寻找一种方法,将列名列表附加到pandas的DataFrame中的现有列名称,然后按col_start + col_add重新排序。

DataFrame已包含col_start的列。

类似的东西:

import pandas as pd

df = pd.read_csv(file.csv)

col_start = ["col_a", "col_b", "col_c"]
col_add = ["Col_d", "Col_e", "Col_f"]
df = pd.concat([df,pd.DataFrame(columns = list(col_add))]) #Add columns
df = df[[col_start.extend(col_add)]] #Rearrange columns

另外,有没有办法将col_start中每个项目的第一个字母大写,类似于title()capitalize()

2 个答案:

答案 0 :(得分:1)

您的代码几乎就在那里,有几件事情:

df = pd.concat([df,pd.DataFrame(columns = list(col_add))])

可以简化为此,因为col_add已经是一个列表:

df = pd.concat([df,pd.DataFrame(columns = col_add)])

此外,您还可以一起添加2个列表:

df = df[[col_start.extend(col_add)]]

变为

df = df[col_start+col_add]

要将列表中的第一个字母大写,请执行以下操作:

In [184]:
col_start = ["col_a", "col_b", "col_c"]
col_start = [x.title() for x in col_start]
col_start

Out[184]:
['Col_A', 'Col_B', 'Col_C']

修改

要避免大写列名称上的KeyError,您需要在调用concat后进行大写,这些列具有向量化的str title方法:

In [187]:
df = pd.DataFrame(columns = col_start + col_add)
df

Out[187]:
Empty DataFrame
Columns: [col_a, col_b, col_c, Col_d, Col_e, Col_f]
Index: []

In [188]:    
df.columns = df.columns.str.title()
df.columns

Out[188]:
Index(['Col_A', 'Col_B', 'Col_C', 'Col_D', 'Col_E', 'Col_F'], dtype='object')

答案 1 :(得分:1)

这是你想要做的:

import pandas as pd

#Here you have a first dataframe
d1 = pd.DataFrame([[1,2,3],[4,5,6]], columns=['col1','col2','col3'])

#a second one
d2 = pd.DataFrame([[8,7,3,8],[4,8,6,8]], columns=['col4','col5','col6', 'col7'])

#Here we can make a dataframe with d1 and d2
d = pd.concat((d1,d2), axis=1)

#We want a different order from the columns ?
d = d[col_start + col_add]

如果要从列'col'中大写值,可以执行

d['col'] = d['col'].str.capitalize()

PS:如果“.str.capitalize()”不起作用,请更新Pandas。

或者,你能做什么:

df['col'] = df['col'].map(lambda x:x.capitalize())