Как ПОМЕНЯТЬ местами строки в фрейме данных Python

#python #python-3.x #pandas

#python #python-3.x #панды

Вопрос:

Я перепробовал все способы, упомянутые в этой теме на сайте, но ничего не работает.

Мне просто нужно поменять местами 2 строки, доступные в файле CSV. упомянутые ниже, я пробовал с этими параметрами, которые также не работают. Просто вставьте больше кода для лучшего понимания..Я беру строки 2 и 3 из Questionnaire.csv и помещаю в файл Questionnaire_edit.csv. теперь после этого мне нужно поменять местами строки в новом файле.

 import pandas as pd
import gzip
import csv
app = Flask(__name__)
df = pd.read_csv("Questionnaire.csv")
df1 = df.iloc[1:2]
df1 = df1[::-1]
df1.to_csv('Questionnaire_edit.csv', index = False)
 

Весь предложенный код, такой как df1 = df1.loc[[2,1]] или переиндексация, работает только тогда, когда CSV имеет индексную строку, как показано ниже.

ВХОДНОЕ значение введите описание изображения здесь

Ожидаемое выходное значение введите описание изображения здесь

Код работает, если CSV имеет этот формат введите описание изображения здесь

Комментарии:

1. попробуйте использовать df[::-1] для инвертирования всего фрейма

2. Тай Крис, но, похоже, это тоже не работает. Я редактирую вопрос, чтобы дать больше информации, может быть

Ответ №1:

Используйте reindex :

 df = pd.DataFrame(np.arange(25).reshape(5, -1), columns=[*'ABCDE'])

df.reindex([4,2,1,3])
 

Вывод:

     A   B   C   D   E
4  20  21  22  23  24
2  10  11  12  13  14
1   5   6   7   8   9
3  15  16  17  18  19
 

Вы даже можете дублировать строки с помощью переиндексации:

 df.reindex([1]*2 [0,4] [3]*3)
 

Вывод:

     A   B   C   D   E
1   5   6   7   8   9
1   5   6   7   8   9
0   0   1   2   3   4
4  20  21  22  23  24
3  15  16  17  18  19
3  15  16  17  18  19
3  15  16  17  18  19
 

Комментарии:

1. Тай Скотт для быстрого предложения, похоже, это тоже не работает, сделал то же самое ниже. Также у меня есть 868 столбцов в файле CSV. импортируйте pandas как pd импортируйте csv app = Flask( имя ) df = pd.read_csv («Questionnaire.csv») df1 = df.iloc[1:2] #df1 = df1[::-1] df1 = df1.reindex([1,0]) df1.to_csv(‘Отслеживание контактовQuestionnaire_edit.csv’, index = False) печать (df1)

2. @Vikas Попробуйте использовать header=None так: df=read_csv("Questionnaire.csv", headers=None) затем df1=....

Ответ №2:

Просто используйте loc и соответствующий индекс строк, которые вы хотите поменять местами.

 df.loc[[2, 1]]
 

Например,

 df = pd.DataFrame([[1,2,3],[4,5,6]])
 

выводит

     0   1   2
----------------
0 | 1   2   3
1 | 4   5   6
 

Чтобы поменять местами индексы 0 и 1, выполните

 df.loc[[1, 0]]
 

выводит

     0   1   2
--------------
1 | 4   5   6
0 | 1   2   3
 

Комментарии:

1. Изменил ли df1 = df.loc[1,0], так как есть только 2 строки, получающие ошибку «TypeError: невозможно выполнить индексацию меток в <class ‘pandas.core.indexes.base. Индексируйте ‘> с помощью этих индексаторов [0] из <class ‘int’> »

2. не df1 = df.loc[1,0] было бы df1 = df.loc[[1,0]]

3. В вашем случае это было бы df1 = df.loc[[2, 1]]

4. Ty Soumik, предлагаемый код работает только тогда, когда в CSV есть строка заголовка (строка индекса). это не работает, если в файле CSV всего 2 строки. упоминание рассматриваемого рисунка