将字符串中的列名称分配给数据框-Python

时间:2018-10-15 05:42:15

标签: python pandas

我在Python中有以下字符串(不是列表,是字符串):

a = ['cc_call_center_sk', 'cc_call_center_id', 'cc_rec_start_date', 'cc_rec_end_date']

我还有以下数据框:

   0      1      2      3
0  AA     AB     BC     CD
1  AZ     ZR     RT     TN

我要做的是将字符串“ a”分配给数据框的列。我是这样做的:

df.columns = a

但是出现以下错误:

TypeError: Index(...) must be called with a collection of some kind, 
"['cc_call_center_sk', 'cc_call_center_id', 'cc_rec_start_date', 
'cc_rec_end_date']" was passed

我无法将字符串直接传递给df.columns。有什么想法吗?谢谢!!!

2 个答案:

答案 0 :(得分:3)

您需要将字符串转换为ast.literal_eval的列表:

import ast

df.columns = ast.literal_eval(a)

使用stripsplit的另一种解决方案,最后为每个列名删除'

a = "['cc_call_center_sk', 'cc_call_center_id', 'cc_rec_start_date', 'cc_rec_end_date']"

#solution 1
df.columns = [x.strip("'") for x in a.strip("[]").split(', ')]
#solution 2
df.columns = pd.Index(a.strip('[]').split(', ')).str.strip("'")

print (df)
  cc_call_center_sk cc_call_center_id cc_rec_start_date cc_rec_end_date
0                AA                AB                BC              CD
1                AZ                ZR                RT              TN

答案 1 :(得分:1)

或更妙的是,使用split

df.columns = map(lambda x:x[1:-1],a[1:-1].split(', '))

那么现在:

print(df)

将是所需的输出,例如:

  cc_call_center_sk cc_call_center_id cc_rec_start_date cc_rec_end_date
0                AA                AB                BC              CD
1                AZ                ZR                RT              TN