【问题标题】:python (pandas) - TypeError: must be str, not list when concatenating listspython (pandas) - 类型错误:连接列表时必须是 str,而不是列表
【发布时间】:2018-03-11 01:46:27
【问题描述】:

我有这个数据框;请注意右侧的最后一列(“Yr_Mo_Date”)

In[38]: data.head()
Out[38]:
    RPT     VAL     ROS     KIL     SHA     BIR     DUB     CLA     MUL     CLO     BEL     MAL     Yr_Mo_Dy
0   15.04   14.96   13.17   9.29    NaN     9.87    13.67   10.25   10.83   12.58   18.50   15.04   61-1-1
1   14.71   NaN     10.83   6.50    12.62   7.67    11.50   10.04   9.79    9.67    17.54   13.83   61-1-2
2   18.50   16.88   12.33   10.13   11.17   6.17    11.25   NaN     8.50    7.67    12.75   12.71   61-1-3
3   10.58   6.63    11.75   4.58    4.54    2.88    8.63    1.79    5.83    5.88    5.46    10.88   61-1-4
4   13.33   13.25   11.42   6.17    10.71   8.21    11.92   6.54    10.92   10.34   12.92   11.83   61-1-5

“Yr_Mo_Dy”列的类型是object,其他都是float64。

我只想更改列的顺序,使“Yr_Mo_Dy”成为数据框中的第一列。 我尝试了以下方法,但我得到了 TypeError。怎么了?

In[39]: cols = data.columns.tolist()
In[40]: cols
Out[40]:
['RPT',
 'VAL',
 'ROS',
 'KIL',
 'SHA',
 'BIR',
 'DUB',
 'CLA',
 'MUL',
 'CLO',
 'BEL',
 'MAL',
 'Yr_Mo_Dy']
In[41]: cols = cols[-1] + cols[:-1]

TypeError                                 Traceback (most recent call last)
<ipython-input-59-c0130d1863e8> in <module>()
----> 1 cols = cols[-1] + cols[:-1]

TypeError: must be str, not list

【问题讨论】:

  • col[-1] 是字符串数据类型; col[1:] 是数据类型列表。您只能将列表添加到列表中,而不能将字符串添加到列表中。
  • cols = [cols[-1]] + cols[:-1]

标签: python list pandas typeerror


【解决方案1】:

您需要为一个元素列表添加:,因为需要连接两个列表:

#string
print (cols[-1])
Yr_Mo_Dy

#one element list
print (cols[-1:])
['Yr_Mo_Dy']

cols = cols[-1:] + cols[:-1]

或者可以添加[],但可读性较差:

cols = [cols[-1]] + cols[:-1]

print (cols)
['Yr_Mo_Dy', 'RPT', 'VAL', 'ROS', 'KIL', 'SHA', 'BIR', 
 'DUB', 'CLA', 'MUL', 'CLO', 'BEL', 'MAL']

【讨论】:

  • 谢谢!!我没有意识到它只提取了一个字符串,愚蠢的我......顺便说一句,我很惊讶你的反应总是如此之快,非常感谢。 :)
  • 我前段时间遇到了同样的问题,所以我记得解决方案;)谢谢。
【解决方案2】:

选项 1
使用 pd.DataFrame.insertpd.DataFrame.pop 更改数据框。这是一个非常通用的解决方案,因为您可以交换任何列位置以进行弹出或插入。

c = df.columns[-1]
df.insert(0, c, df.pop(c))
df

  Yr_Mo_Dy    RPT    VAL    ROS    KIL    SHA   BIR    DUB    CLA    MUL    CLO    BEL    MAL
0   61-1-1  15.04  14.96  13.17   9.29    NaN  9.87  13.67  10.25  10.83  12.58  18.50  15.04
1   61-1-2  14.71    NaN  10.83   6.50  12.62  7.67  11.50  10.04   9.79   9.67  17.54  13.83
2   61-1-3  18.50  16.88  12.33  10.13  11.17  6.17  11.25    NaN   8.50   7.67  12.75  12.71
3   61-1-4  10.58   6.63  11.75   4.58   4.54  2.88   8.63   1.79   5.83   5.88   5.46  10.88
4   61-1-5  13.33  13.25  11.42   6.17  10.71  8.21  11.92   6.54  10.92  10.34  12.92  11.83

选项 2
pd.DataFrame.reindex_axisnp.roll

df.reindex_axis(np.roll(df.columns, 1), 1)

  Yr_Mo_Dy    RPT    VAL    ROS    KIL    SHA   BIR    DUB    CLA    MUL    CLO    BEL    MAL
0   61-1-1  15.04  14.96  13.17   9.29    NaN  9.87  13.67  10.25  10.83  12.58  18.50  15.04
1   61-1-2  14.71    NaN  10.83   6.50  12.62  7.67  11.50  10.04   9.79   9.67  17.54  13.83
2   61-1-3  18.50  16.88  12.33  10.13  11.17  6.17  11.25    NaN   8.50   7.67  12.75  12.71
3   61-1-4  10.58   6.63  11.75   4.58   4.54  2.88   8.63   1.79   5.83   5.88   5.46  10.88
4   61-1-5  13.33  13.25  11.42   6.17  10.71  8.21  11.92   6.54  10.92  10.34  12.92  11.83

【讨论】:

  • 有趣!比我要找的要简单得多!将来会使用它。谢谢!
猜你喜欢
  • 1970-01-01
  • 2015-05-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-15
  • 1970-01-01
  • 2019-05-08
相关资源
最近更新 更多