Pandas df.shift (axis = 1) добавляет дополнительные записи, почему? - PullRequest
0 голосов
/ 06 апреля 2020

Вот образец оригинальной таблицы.

    #     z  speed   dir  U_geo  V_geo   U  U[QCC]  U[ign]  U[siC]  U[siD]   V
0  40  2.83  181.0  0.05   2.83  -0.20  11   -0.20    2.24    0.95    2.83  11
1  50  2.41  184.8  0.20   2.40  -0.01  11   -0.01    2.47    0.94    2.41  11
2  60  1.92  192.4  0.41   1.88   0.25  11    0.25    2.46    0.94    1.91  11
3  70  1.75  201.7  0.65   1.63   0.50  11    0.50    2.47    0.94    1.68  11

Мне нужно сдвинуть всю таблицу на 1 столбец, чтобы получить это:

    z  speed   dir  U_geo  V_geo   U  U[QCC]  U[ign]  U[siC]  U[siD]   V
0  40  2.83  181.0  0.05   2.83  -0.20  11   -0.20    2.24    0.95    2.83  
1  50  2.41  184.8  0.20   2.40  -0.01  11   -0.01    2.47    0.94    2.41  
2  60  1.92  192.4  0.41   1.88   0.25  11    0.25    2.46    0.94    1.91  
3  70  1.75  201.7  0.65   1.63   0.50  11    0.50    2.47    0.94    1.68

Вот код, который принимает данные и пытается переместить их на один столбец

wind_rass_table_df=pd.read_csv(file_path, header=j+3, engine='python', nrows=77,sep=r'\s{2,}',skip_blank_lines=False,index_col=False)
wind_rass_table_df=wind_rass_table_df.shift(periods=1,axis=1)

Предположительно, df.shift (axis = 1) должен сдвинуть кадр данных на 1 столбец, но он делает больше, он делает это:

    #   z  speed    dir  U_geo  V_geo     U  U[QCC]  U[ign]  U[siC]
0 NaN NaN   2.83  181.0   0.05   2.83  40.0   -0.20   -0.20    2.24
1 NaN NaN   2.41  184.8   0.20   2.40  50.0   -0.01   -0.01    2.47
2 NaN NaN   1.92  192.4   0.41   1.88  60.0    0.25    0.25    2.46
3 NaN NaN   1.75  201.7   0.65   1.63  70.0    0.50    0.50    2.47

Функция сдвига имеет взял первый столбец, вставил его в 7-й столбец, сдвинул 7-й в 8-й и повторил 8-й, переместив 9-й снова и т. д.

Как правильно сместить кадр данных на один столбец?

Большое спасибо!

1 Ответ

0 голосов
/ 06 апреля 2020

Вы можете использовать ilo c и создать другой фрейм данных:

df = pd.DataFrame(data=df.iloc[:, :-1], columns=df.columns[1:], index=df.index)
...