我正在寻找一种方法,将列名列表附加到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()
?
答案 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())