2015-12-17 4 views
3

У меня есть файл CSV с 4 столбцами, первый столбец case id (что повторяется).Запись Python pandas dataframe строк в файл

========INPUT csv file============= 
case_num, serial,binary,review 
23,29983, 1, "lorem ipsum ,lorem ipsum" 
23,298829, 1, "Hi there" 
29, 20020, 0, "hickery dickery dock" 
29,298829, 1, "Hello there" 
29, 28220, 0, "dickery dock" 

Я пытаюсь отфильтровать все строки только на основе уникального числа идентификаторов.

input=pandas.read_csv("inp.csv") 
case_id=fl["case_num"] 
case_id.sort 
with open("out.csv","w") as fl:  
    for i in case_id.unique(): 
     fl.write(([input['case_num']==i].iloc[0].values)) 

Выход:

[23 '29983' 1 
'lorem ipsum ,lorem ipsum'] #<type 'numpy.ndarray'> 

[29 '20220' 0 
'hickery dickery dock']  #<type 'numpy.ndarray'> 

Как вы можете видеть, что вывод записывается в разных строках, но я хочу, чтобы они должным образом в одной строке каждой линии разделения запятой.

===== ХОЧЕТ ВЫХОДА =======

23, '29983', 1, 'lorem ipsum ,lorem ipsum' 
29 ,'20220', 0, 'hickery dickery dock' 

Проще говоря, если я прочитал несколько строк из dataframe (генерируется с помощью файла CSV), то как я пишу выбранное подмножество строк точно в том же формате (что и файл ввода csv) в выходной файл csv.

+0

Пожалуйста, покажите ваш желаемый результат, неясно точно, что вы после – EdChum

+1

@EdChum пожалуйста, проверьте, есть добавлен желаемый результат. В основном, как вы выбираете строку из dataframe (заполненную из csv-файла) и записываете вывод точно так же, как и во входном файле. – shalini

+0

Можете ли вы добавить образец вашего входного файла? – jezrael

ответ

4

IIUC вы можете использовать drop_duplicates:

print df 
    case id case_num no      text 
0  23 '29983' 1 'lorem ipsum ,lorem ipsum' 
1  23 '29983' 1 'lorem ipsum ,lorem ipsum' 
2  23 '29983' 1 'lorem ipsum ,lorem ipsum' 
3  23 '29983' 1 'lorem ipsum ,lorem ipsum' 
4  29 '20220' 0  'hickery dickery dock' 

df = df.drop_duplicates(subset='case id') 
print df 
    case id case_num no      text 
0  23 '29983' 1 'lorem ipsum ,lorem ipsum' 
4  29 '20220' 0  'hickery dickery dock' 

Вывод в формате CSV по to_csv:

df.to_csv(filename, sep=',', index=False) 
case id,case_num,no,text 
23,'29983',1,"'lorem ipsum ,lorem ipsum'" 
29,'20220',0,'hickery dickery dock' 
+1

Но я хочу написать вывод «print df» в файл csv. (каждый столбец разделен символом «,» и с именами столбцов, если это возможно) – shalini

Смежные вопросы