Изменение всех строк в столбце CSV в список целых чисел - PullRequest
0 голосов
/ 26 сентября 2019

В настоящее время я работаю с пандами, чтобы изменить столбец CSV из строк:

"3,9,11,16,25,26,28,29,36,40,41,46,63,66,67,69,72,73,78,80"

в список целых чисел:

[3,9,11,16,25,26,28,29,36,40,41,46,63,66,67,69,72,73,78,80]

Кто-нибудь знает, как это сделать?в идеале я хотел бы переписать это в тот же CSV-файл, из которого я извлекаю эти данные, но я полагаю, я могу просто добавить .to_csv к концу того, что я должен сделать

любые предложения будут оценены!спасибо!

ОБНОВЛЕНИЕ: больше данных, работающих с CSV CVS DATASET

Вот воспроизводимый пример

import os
import pandas as pd

databasefile = "I:\Github\ClubKeno\Keno Project\Database\..\LotteryDatabase.csv"

def dataSort():
    db = pd.read_csv(databasefile, skip_blank_lines=True,
                     names=['Draw_Number', 'Winning_Numbers', 'Extra_Numbers', 'Kicker'], header=0)
    db.drop_duplicates(inplace=True)

    # converting data types
    db['Winning_Numbers'] = list(map(int, pd.Series.str.split(",")))
    print(db['Winning_Numbers'])

datasort()

ФАЙЛ CSV

Данные:

 Draw_Number                                              Winning_Numbers  Extra_Numbers  Kicker
     1500844    3,9,11,16,25,26,28,29,36,40,41,46,63,66,67,69,72,73,78,80            NaN       2
     1500845    6,7,11,12,13,17,18,23,29,30,39,42,47,50,51,56,62,63,66,75            NaN       2
     1500846    2,9,10,12,14,18,24,28,38,40,41,44,50,55,57,61,65,68,72,76            NaN       1
     1500847   9,10,22,25,28,36,40,45,46,47,52,54,57,58,59,65,69,70,74,79            NaN       2
     1500848    7,9,13,14,16,17,18,19,24,25,27,34,40,41,42,47,49,50,53,71            NaN       2
     1500849       3,4,6,7,9,16,32,35,36,48,49,51,54,61,63,66,67,68,73,74            NaN       2
     1500850  15,16,17,18,21,23,26,31,32,44,45,46,47,54,56,57,58,64,75,79            NaN       2
     1500851   8,13,15,17,19,22,25,28,29,31,33,34,37,41,46,47,53,54,63,64            NaN       1
     1500852     5,7,8,15,20,23,24,26,27,34,40,46,53,58,60,65,66,68,69,74            NaN       1
     1500853   1,13,15,16,17,19,21,37,39,46,47,50,53,54,57,61,67,71,72,76            NaN       5
     1500854   8,15,18,22,28,31,33,34,35,39,40,46,47,57,65,67,69,74,76,78            NaN       2
     1500855     2,5,8,12,17,18,20,21,26,31,40,43,46,58,62,64,69,74,76,79            NaN       1
     1500856    2,9,17,22,25,27,29,39,42,43,49,52,61,64,67,69,71,75,79,80            NaN       2
     1500857     4,5,9,11,15,18,22,31,32,33,42,45,48,58,60,61,65,69,70,73            NaN       2
     1500858    3,9,10,14,16,29,37,40,42,46,52,53,54,55,56,57,72,74,79,80            NaN       1
     1500859  11,12,16,19,20,27,28,32,37,44,46,54,58,59,62,66,69,75,77,78            NaN       1
     1500860     3,6,7,11,17,19,23,24,30,31,32,33,42,48,49,57,68,69,70,73            NaN       5

Ответы [ 2 ]

1 голос
/ 26 сентября 2019

Эта проблема обычно возникает при сохранении и загрузке панелей данных в формате .CSV files (с использованием to_csv()), который является текстовым форматом. Поэтому он не может содержать тип вашего объекта.

Если вы хотите сохранить тип, вы можете выбрать объект (если это возможно!)

Или, читая из CSV, вы можете прочитать этот столбец как список

db.loc[:,'Winning_Numbers'] = db.loc[:,'Winning_Numbers'].apply(lambda x: literal_eval(x))
1 голос
/ 26 сентября 2019

Используйте параметр converters, равный pandas.read_csv:

import pandas as pd

df = pd.read_csv('LotteryDatabase.csv', converters={'Winning_Numbers': eval}) 

 Draw_Number                                                                  Winning_Numbers  Extra_Numbers  Kicker
     1500844   (3, 9, 11, 16, 25, 26, 28, 29, 36, 40, 41, 46, 63, 66, 67, 69, 72, 73, 78, 80)            NaN       2
     1500845   (6, 7, 11, 12, 13, 17, 18, 23, 29, 30, 39, 42, 47, 50, 51, 56, 62, 63, 66, 75)            NaN       2
     1500846   (2, 9, 10, 12, 14, 18, 24, 28, 38, 40, 41, 44, 50, 55, 57, 61, 65, 68, 72, 76)            NaN       1
     1500847  (9, 10, 22, 25, 28, 36, 40, 45, 46, 47, 52, 54, 57, 58, 59, 65, 69, 70, 74, 79)            NaN       2
     1500848   (7, 9, 13, 14, 16, 17, 18, 19, 24, 25, 27, 34, 40, 41, 42, 47, 49, 50, 53, 71)            NaN       2

print(type(df.Winning_Numbers.loc[0]))
>>> tuple

print(type(df.Winning_Numbers.loc[0][0]))
>>> int

# if you absolutely need Winning_Numbers to be a list
df.Winning_Numbers = df.Winning_Numbers.apply(list)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...