我在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。有什么想法吗?谢谢!!!
答案 0 :(得分:3)
您需要将字符串转换为ast.literal_eval
的列表:
import ast
df.columns = ast.literal_eval(a)
使用strip
和split
的另一种解决方案,最后为每个列名删除'
:
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