У меня есть csv файл с данными(7 столбцов и 6063 строк). Названия столбцов что-то вроде ['id', 'seller', 'buyer', 'timestamp']. И соответствующие данные в строках. Нужно очистить этот файл от строк, где seller=buyer.
import pandas as pd
data=pd.read_csv('file.csv', sep=';', decimal=',')
dat=pd.DataFrame(data.T)
for i in dat:
if dat[dat.columns[i]][1]==dat[dat.columns[i]][2]:
a=dat.columns[i]
Вот что-то такое у меня получается, а вот с удалением столбцов(теперь это уже столбцы) у меня проблема, так как это не столбцы, которые идут по-порядку, а перечислять название 1450 столбцов как-то не очень хочется. Подскажите, как здесь лучше поступить?
Ответ
Воспользуйтесь методом .query()
data = pd.read_csv('file.csv', sep=';', decimal=',', quotechar="'").query('seller != buyer')
Если надо сохранить обратно в CSV:
data.to_csv('output.csv', index=False)
PS вам не нужно транспонировать DataFrame для того, чтобы отфильтровать его
PPS если вы используете Pandas то старайтесь не использовать for loop - это не очень эффективно
Вот рабочий пример с учетом того, что в вашем CSV в качестве квотирующей кавычки используется '
CSV файл - D:\temp\buyer_seller.csv
'id';'seller';'buyer';'timestamp'
1;seller-1;buyer-1;2016-01-01
2;seller-2;buyer-2;2016-01-02
3;same-1;same-1;2016-01-11
4;same-2;same-2;2016-01-22
Код:
In [21]: pd.read_csv(r'D:\temp\buyer_seller.csv', sep=';')
Out[21]:
'id' 'seller' 'buyer' 'timestamp'
0 1 seller-1 buyer-1 2016-01-01
1 2 seller-2 buyer-2 2016-01-02
2 3 same-1 same-1 2016-01-11
3 4 same-2 same-2 2016-01-22
In [22]: pd.read_csv(r'D:\temp\buyer_seller.csv', sep=';', quotechar="'")
Out[22]:
id seller buyer timestamp
0 1 seller-1 buyer-1 2016-01-01
1 2 seller-2 buyer-2 2016-01-02
2 3 same-1 same-1 2016-01-11
3 4 same-2 same-2 2016-01-22
In [23]: pd.read_csv(r'D:\temp\buyer_seller.csv', sep=';', quotechar="'").query('seller != buyer')
Out[23]:
id seller buyer timestamp
0 1 seller-1 buyer-1 2016-01-01
1 2 seller-2 buyer-2 2016-01-02
Альтернативно можно просто избавиться от кавычек в именах столбцов/колонок:
In [27]: df = pd.read_csv(r'D:\temp\buyer_seller.csv', sep=';')
In [28]: df.columns.tolist()
Out[28]: ["'id'", "'seller'", "'buyer'", "'timestamp'"]
In [30]: df.columns = df.columns.str.replace("'", '')
In [31]: df.columns.tolist()
Out[31]: ['id', 'seller', 'buyer', 'timestamp']
Комментариев нет:
Отправить комментарий