在 Python (Pandas-Numpy) 中,如何使用条件和迭代修改列名(字符串)?
In Python (Pandas-Numpy), how to modify column names (strings), using a condition and iteration?
我正在尝试修改包含很多列的数据框的列名。列名是像这样的字符串:
'0000', '0005'...'0100'...'2355'
由于是大量的列,我需要通过迭代来完成。修改的要点是,如果列名(字符串)以'0'开头,则修改该列名(字符串),使新值仅为字符串的最后3位(所有字符串均为4位)。
所以我所做的是:
将列名放在列表中
df_cols = df.columns.tolist()
然后通过迭代对列表进行修改
for i in range(len(df_cols)):
if df_cols[i][0] == '0':
df_cols[i] = df_cols[i][1:4]
当我检查列表时,它有效地进行了修改。但是,当我尝试在数据框中使用列名修改列表(df_cols)时:
df = df[df_cols]
我收到一条错误消息:
File "c:\users\hernan\anaconda\lib\site-packages\pandas\core\frame.py", line 1774, in __getitem__
return self._getitem_array(key)
File "c:\users\hernan\anaconda\lib\site-packages\pandas\core\frame.py", line 1818, in _getitem_array
indexer = self.ix._convert_to_indexer(key, axis=1)
File "c:\users\hernan\anaconda\lib\site-packages\pandas\core\indexing.py", line 1143, in _convert_to_indexer
raise KeyError('%s not in index' % objarr[mask])
KeyError: "['000' '001' '002' '003' '004' '005' '006' '007'....] not in index"
感谢您的帮助
您刚刚更改了 df_cols
的值。您必须先更新 DataFrame 的列名才能使用它们:
df.columns = df_cols
您正在修改列的副本,而不是实际的 column_names。应该这样做:
df_cols = df.columns.tolist()
for i in range(len(df_cols)):
if df_cols[i][0] == '0':
df_cols[i] = df_cols[i][1:4]
df.columns = df_cols #Here you substitute back the modified column names to the dataframe
希望对您有所帮助.. :)
我正在尝试修改包含很多列的数据框的列名。列名是像这样的字符串:
'0000', '0005'...'0100'...'2355'
由于是大量的列,我需要通过迭代来完成。修改的要点是,如果列名(字符串)以'0'开头,则修改该列名(字符串),使新值仅为字符串的最后3位(所有字符串均为4位)。
所以我所做的是:
将列名放在列表中
df_cols = df.columns.tolist()
然后通过迭代对列表进行修改
for i in range(len(df_cols)):
if df_cols[i][0] == '0':
df_cols[i] = df_cols[i][1:4]
当我检查列表时,它有效地进行了修改。但是,当我尝试在数据框中使用列名修改列表(df_cols)时:
df = df[df_cols]
我收到一条错误消息:
File "c:\users\hernan\anaconda\lib\site-packages\pandas\core\frame.py", line 1774, in __getitem__
return self._getitem_array(key)
File "c:\users\hernan\anaconda\lib\site-packages\pandas\core\frame.py", line 1818, in _getitem_array
indexer = self.ix._convert_to_indexer(key, axis=1)
File "c:\users\hernan\anaconda\lib\site-packages\pandas\core\indexing.py", line 1143, in _convert_to_indexer
raise KeyError('%s not in index' % objarr[mask])
KeyError: "['000' '001' '002' '003' '004' '005' '006' '007'....] not in index"
感谢您的帮助
您刚刚更改了 df_cols
的值。您必须先更新 DataFrame 的列名才能使用它们:
df.columns = df_cols
您正在修改列的副本,而不是实际的 column_names。应该这样做:
df_cols = df.columns.tolist()
for i in range(len(df_cols)):
if df_cols[i][0] == '0':
df_cols[i] = df_cols[i][1:4]
df.columns = df_cols #Here you substitute back the modified column names to the dataframe
希望对您有所帮助.. :)