Pandas Dataframe把我的字典变成了字符串

2024-06-16 05:40:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据帧,每个单元格保存一个字典。在导出数据帧之前,我可以将每个单元格作为单独的数据帧调用。在

但是,在将数据帧保存为csv并重新打开后,每个单元格都变成了字符串,因此我无法再将我调用的单元格转换为数据帧。在

The output should look like this

After saving the dataframe as csv, dictionary became string

在我对Stackoverflow的研究之后,我惊讶地发现,并没有多少人像我一样经历过同样的问题。我想知道我的做法是否错误。我只找到两个与我的问题有关的帖子。这是一个(dict objects converting to string when read from csv to dataframe pandas python)。在

我基本上试过json,ast.literal_评估但这些都不能解决我的问题。在

这是我代码的第一部分(我创建了这个四个列表来存储我从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

^{pr2}$

现在,我需要在另一个笔记本上读这个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]'

谢谢你的帮助。在


Tags: csv数据periodlasttickeryrannappend
2条回答

我曾经犯过同样的错误。我用DataFrame.to_pickle()代替DataFrame.to_csv()来解决这个问题。在

CSV文件中的所有内容都是纯文本,甚至是数值。当您将CSV文件加载到电子表格程序中时,会有解析器查找可识别为数字或日期的字符串,并相应地进行转换。在

CSV文件不能轻松地保存更复杂的Python对象,但是如果将Python对象放在数据帧中,Pandas不会抛出错误。它将它们转换为字符串表示形式。在

CSV不是保存字典的合适格式(老实说,将字典放入数据帧不是一个好的数据结构)。您应该尝试将DataFrame写入json:https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.to_json.html

相关问题 更多 >