为特定列添加前缀 Dataframe

我有 DataFrame 这样的 :


col1 col2 col3 col4 col5 col6 col7 col8
0 5345 rrf rrf rrf rrf rrf rrf
1 2527 erfr erfr erfr erfr erfr erfr
2 2727 f f f f f f


我想重命名所有列,但不是

col1



col2

.

所以我试图制作一个循环


print/df.columns/
for col in df.columns:
if col != 'col1' and col != 'col2':
col.rename = str/col/ + '_x'


但这不是很好 efficient...it 不起作用 !
已邀请:

詹大官人

赞同来自:

您可以使用该方法 DataFrame.rename//


new_names = [/i,i+'_x'/ for i in df.iloc[:, 2:].columns.values]
df.rename/columns = dict/new_names/, inplace=True/

知食

赞同来自:

最简单的解决方案
col1


col2

- 这些是第一个和第二列的名称:


df.columns = df.columns[:2].union/df.columns[2:] + '_x'/
print /df/
col1 col2 col3_x col4_x col5_x col6_x col7_x col8_x
0 0 5345 rrf rrf rrf rrf rrf rrf
1 1 2527 erfr erfr erfr erfr erfr erfr
2 2 2727 f f f f f f


另一个决定。
http://pandas.pydata.org/panda ... .html
或理解列表:


cols = df.columns[~df.columns.isin/['col1','col2']/]
print /cols/
['col3', 'col4', 'col5', 'col6', 'col7', 'col8']

df.rename/columns = dict/zip/cols, cols + '_x'//, inplace=True/

print /df/

col1 col2 col3_x col4_x col5_x col6_x col7_x col8_x
0 0 5345 rrf rrf rrf rrf rrf rrf
1 1 2527 erfr erfr erfr erfr erfr erfr
2 2 2727 f f f f f f



cols = [col for col in df.columns if col not in ['col1', 'col2']]
print /cols/
['col3', 'col4', 'col5', 'col6', 'col7', 'col8']

df.rename/columns = dict/zip/cols, cols + '_x'//, inplace=True/

print /df/

col1 col2 col3_x col4_x col5_x col6_x col7_x col8_x
0 0 5345 rrf rrf rrf rrf rrf rrf
1 1 2527 erfr erfr erfr erfr erfr erfr
2 2 2727 f f f f f f


最快的是对列表的理解:


df.columns = [col+'_x' if col != 'col1' and col != 'col2' else col for col in df.columns]


Tayyumi

:


In [350]: %timeit /akot/df//
1000 loops, best of 3: 387 µs per loop

In [351]: %timeit /jez/df1//
The slowest run took 4.12 times longer than the fastest. This could mean that an intermediate result is being cached.
10000 loops, best of 3: 207 µs per loop

In [363]: %timeit /jez3/df2//
The slowest run took 6.41 times longer than the fastest. This could mean that an intermediate result is being cached.
10000 loops, best of 3: 75.7 µs per loop



df1 = df.copy//
df2 = df.copy//

def jez/df/:
df.columns = df.columns[:2].union/df.columns[2:] + '_x'/
return df

def akot/df/:
new_names = [/i,i+'_x'/ for i in df.iloc[:, 2:].columns.values]
df.rename/columns = dict/new_names/, inplace=True/
return df


def jez3/df/:
df.columns = [col + '_x' if col != 'col1' and col != 'col2' else col for col in df.columns]
return df


print /akot/df//
print /jez/df1//
print /jez2/df1//

帅驴

赞同来自:

您可以使用
http://pandas.pydata.org/panda ... .html
有模板 regex 用于过滤感兴趣 cols, 然后在帮助下
zip

建造 dict 并将其转移为 arg 在
http://pandas.pydata.org/panda ... .html
:


In [94]:
cols = df.columns[~df.columns.str.contains/'col1|col2'/]
df.rename/columns = dict/zip/cols, cols + '_x'//, inplace=True/
df

Out[94]:
col1 col2 col3_x col4_x col5_x col6_x col7_x col8_x
0 0 5345 rrf rrf rrf rrf rrf rrf
1 1 2527 erfr erfr erfr erfr erfr erfr
2 2 2727 f f f f f f


所以这是使用
str.contains

过滤列将返回不重合的列,因此列的顺序无关紧要

要回复问题请先登录注册