我有一个Pandas 数据框,其中每行对应一篇新闻文章,行中的每个单元格都包含一个词典,其中包含股票行情信息以及一些指标.DataFrame还包含一个TIME_PUBLISHED列,该列包含与文章所在行对应的发布日期和时间.

我将表展平为更可行的格式,但由于我这样做的方式,我现在在最终的表中缺少time_published数据.我不知道该怎么做才能留住它.

这是原始表:

index 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 time_published
0 {'ticker': 'RYCEF', 'relevance_score': '0.079921', 'ticker_sentiment_score': '0.091132', 'ticker_sentiment_label': 'Neutral'} null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null 20240211T042031
1 null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null 20240211T034349
2 {'ticker': 'FOREX:IDR', 'relevance_score': '0.047371', 'ticker_sentiment_score': '0.0', 'ticker_sentiment_label': 'Neutral'} {'ticker': 'FOREX:JPY', 'relevance_score': '0.094576', 'ticker_sentiment_score': '0.079538', 'ticker_sentiment_label': 'Neutral'} null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null 20240211T033015
3 null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null 20240211T031049
4 {'ticker': 'BLK', 'relevance_score': '0.080188', 'ticker_sentiment_score': '-0.036152', 'ticker_sentiment_label': 'Neutral'} {'ticker': 'GOOG', 'relevance_score': '0.080188', 'ticker_sentiment_score': '0.0', 'ticker_sentiment_label': 'Neutral'} {'ticker': 'CRYPTO:BTC', 'relevance_score': '0.237358', 'ticker_sentiment_score': '0.229927', 'ticker_sentiment_label': 'Somewhat-Bullish'} null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null 20240211T023653

我使用以下代码块将表格拼合成一种可行的格式:

df_final = pd.DataFrame() 
for i in range(0, 41):
    df_flat_ticker_temp = pd.json_normalize(df_flat_ticker[i])
    df_final = pd.concat([df_final, df_flat_ticker_temp])
    df_final = df_final.dropna() 

结果如下表所示:

index ticker relevance_score ticker_sentiment_score ticker_sentiment_label
0 RYCEF 0.079921 0.091132 Neutral
2 FOREX:IDR 0.047371 0.0 Neutral
4 BLK 0.080188 -0.036152 Neutral
5 NSC 0.329551 -0.319278 Somewhat-Bearish
6 FOREX:EUR 0.043499 -0.222413 Somewhat-Bearish
7 FOREX:EUR 0.259727 0.11301 Neutral
8 VZ 0.390613 0.331239 Somewhat-Bullish
9 BABA 0.064449 0.0 Neutral
10 ADM 0.376704 0.166407 Somewhat-Bullish
11 EVGGF 0.098255 -0.010632 Neutral

我对这个表很满意,但唯一的问题是,由于该表最初的格式,我找不到一种方法来保存TIME_PUBLED数据.这项任务的困难源于这样一个事实:在原始表中,TIME_PUBLISHED列中的条目与该行中的所有词典相对应,但在我的最终表中,每个词典现在都是单独的行.我很感激任何比我更擅长Pandas 的人在如何做到这一点上的帮助或建议.

推荐答案

您可以将time_published列添加回附加到df_final的每一组列:

for i in range(42):
    df_flat_ticker_temp = pd.json_normalize(df_flat_ticker[i])
    df_final = pd.concat([df_final, pd.concat([df_flat_ticker_temp, df['time_published']], axis=1)])

df_final = df_final.dropna()

示例数据的输出:

       ticker relevance_score ticker_sentiment_score ticker_sentiment_label   time_published
0       RYCEF        0.079921               0.091132                Neutral  20240211T042031
2   FOREX:IDR        0.047371                    0.0                Neutral  20240211T033015
4         BLK        0.080188              -0.036152                Neutral  20240211T023653
2   FOREX:JPY        0.094576               0.079538                Neutral  20240211T033015
4        GOOG        0.080188                    0.0                Neutral  20240211T023653
4  CRYPTO:BTC        0.237358               0.229927       Somewhat-Bullish  20240211T023653

请注意,您需要range(42)个才能覆盖所有列(最多41个).

此外,您还可以使用assign而不是嵌套的concat:

df_final = pd.concat([df_final, df_flat_ticker_temp.assign(time_published=df['time_published'])])

Python相关问答推荐

两个pandas的平均值按元素的结果串接元素.为什么?

Pandas计数符合某些条件的特定列的数量

cv2.matchTemplate函数匹配失败

导入...从...混乱

移动条情节旁边的半小提琴情节在海运

给定高度约束的旋转角解析求解

与命令行相比,相同的Python代码在Companyter Notebook中运行速度慢20倍

如何在PySide/Qt QColumbnView中删除列

pysnmp—lextudio使用next()和getCmd()生成器导致TypeError:tuple对象不是迭代器''

Pandas:填充行并删除重复项,但保留不同的值

以异步方式填充Pandas 数据帧

处理Gekko的非最优解

如何将泛型类类型与函数返回类型结合使用?

在pandas中,如何在由两列加上一个值列组成的枢轴期间或之后可靠地设置多级列的索引顺序,

一维不匹配两个数组上的广义ufunc

使用xlsxWriter在EXCEL中为数据帧的各行上色

.awk文件可以使用子进程执行吗?

VSCode Pylance假阳性(?)对ImportError的react

组颠倒大Pandas 数据帧

有没有更python的方法来复制python中列表的第n个元素?例如,使用列表理解