Pandas Dataframe превратил мои словари в строку - PullRequest
0 голосов
/ 29 сентября 2018

У меня есть датафрейм, каждая ячейка сохраняет словарь.Прежде чем экспортировать фрейм данных, я мог бы назвать каждую ячейку как отдельный фрейм данных.

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

Вывод должен выглядеть следующим образом

После сохранения фрейма данных в виде csv словарь стал строкой

Я был удивленузнать после моего исследования Stackoverflow, было не так много людей, испытывающих ту же проблему, что и у меня.Я задавался вопросом, является ли моя практика неправильной.Я нашел только два сообщения, связанные с моей проблемой.Вот один из них ( объекты dict, преобразующие в строку при чтении из CSV в dataframe pandas python ).

Я в основном пробовал json, ast.literal_eval и yaml, но ни один из них не смог решить мою проблему.

Это первая часть моего кода (я создал этот четыре списка для хранения своих данных, которые я вызвал из API)

tickers4 = []
last_1st_bs4 = []
last_2nd_bs4 = []
last_3rd_bs4 = []

for i in range(len(tickers)):
    try:
        ticker = tickers.loc[i, 'ticker']
        ann_yr = 2018

        yr_1st = intrinio.financials_period(ticker, str(ann_yr-1), fiscal_period='FY', statement='balance_sheet')
        yr_2nd = intrinio.financials_period(ticker, str(ann_yr-2), fiscal_period='FY', statement='balance_sheet')
        yr_3rd = intrinio.financials_period(ticker, str(ann_yr-3), fiscal_period='FY', statement='balance_sheet')

        tickers4.append(ticker)
        last_1st_bs4.append(yr_1st)
        last_2nd_bs4.append(yr_2nd)
        last_3rd_bs4.append(yr_3rd)

        print('{} Feeding data {}'.format(i, ticker))

    except:
        tickers4.append(ticker)
        last_1st_bs4.append(0)
        last_2nd_bs4.append(0)
        last_3rd_bs4.append(0)
        print('{} Error {}'.format(i, ticker))

Вторая часть: я поместил их в кадр данных исохранено как CSV

BS = pd.DataFrame()
BS['ticker'] = tickers4
BS['BS_2017'] = last_1st_bs4
BS['BS_2016'] = last_2nd_bs4
BS['BS_2015'] = last_3rd_bs4
BS.to_csv('Balance_Sheet_2015_2017.csv')

Теперь мне нужно прочитать этот CSV в другой записной книжке

BS = pd.read_csv('./Balance_Sheet_2015_2017.csv', index_col=0)
BS.loc[9, 'BS_2017']

вот результат, который я получил: ' cashandequivalents shortterminvestments notereceivable \\\nyear \n2017 2.028900e+10 5.389200e+10 1.779900e+10 \n\n accountsreceivable netinventory othercurrentassets \\\nyear \n2017 1.787400e+10 4.855000e+09 1.393600e+10 \n\n totalcurrentassets netppe longterminvestments \\\nyear \n2017 1.286450e+11 3.378300e+10 1.947140e+11 \n\n othernoncurrentassets ... \\\nyear ... \n2017 1.817700e+10 ... \n\n commitmentsandcontingencies commonequity retainedearnings \\\nyear \n2017 0.0 3.586700e+10 9.833000e+10 \n\n aoci totalcommonequity totalequity \\\nyear \n2017 -150000000.0 1.340470e+11 1.340470e+11 \n\n totalequityandnoncontrollinginterests totalliabilitiesandequity \\\nyear \n2017 1.340470e+11 3.753190e+11 \n\n currentdeferredrevenue noncurrentdeferredrevenue \nyear \n2017 7.548000e+09 2.836000e+09 \n\n[1 rows x 30 columns]'

Спасибо за вашПомогите.

Ответы [ 2 ]

0 голосов
/ 29 сентября 2018

У меня была одна и та же ошибка один раз.Я решил это, используя DataFrame.to_pickle() вместо DataFrame.to_csv().

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

CSV-файл не может легко содержать более сложный Pythonобъекты, но Pandas не выдаст ошибку, если вы поместите объекты Python в DataFrame.Он преобразует их в строковые представления.

0 голосов
/ 29 сентября 2018

CSV - неподходящий формат для сохранения словарей (и, честно говоря, размещение словарей в DataFrames не является хорошей структурой данных).Вместо этого вы должны попробовать записать DataFrame в json: https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.to_json.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...