df.loc[:, reversed(colnames)]
可以从df中检索切片,但是不能用于分配给df。为了分配给df切片,我必须使用df.loc[:, list(reversed(colnames))]
观察以下代码和输出以进行澄清:
import pandas as pd
import numpy as np
df = pd.DataFrame(
{'a':list('asdf'), 'b':range(4)}
)
print('df==', df, sep='\n')
colnames = ['a', 'b']
print('\ndf.loc[:, reversed(colnames)]:', df.loc[:, reversed(colnames)], sep='\n')
df.loc[:, reversed(colnames)] = np.nan
print('\ndf after df.loc[:, reversed(colnames)]=np.nan:', df, sep='\n')
df.loc[:, list(reversed(colnames))] = np.nan
print('\ndf after df.loc[:, list(reversed(colnames))]=np.nan:', df, sep='\n')
和输出:
df==
a b
0 a 0
1 s 1
2 d 2
3 f 3
df.loc[:, reversed(colnames)]:
b a
0 0 a
1 1 s
2 2 d
3 3 f
df after df.loc[:, reversed(colnames)]=np.nan:
a b
0 a 0
1 s 1
2 d 2
3 f 3
df after df.loc[:, list(reversed(colnames))]=np.nan:
a b
0 NaN NaN
1 NaN NaN
2 NaN NaN
3 NaN NaN
此行为是新的。使用Anaconda 2018.12时,我不必list()
进行分配,最近我已升级到Anaconda 2019.03。
我想知道是什么原因导致的。