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
Это поведение новое. Мне не нужно было list()
выполнять задания, когда я использовал Anaconda 2018.12, я недавно обновился до Anaconda 2019.03.
Интересно, что изменилось и вызвало это.