我有一个预定义的DatetimeIndex和一个元组列表:(datetime,float,float,float)。我需要创建一个Pandas数据框并用列表中的数据填充它。不用说,每个记录的第一个元素(元组)定义了它在结果数据帧中的假定位置,而不是列的值,结果数据帧中只有3个浮点列。DatetimeIndex中没有匹配元素的记录应该被丢弃(我不介意在这种情况下出现错误)。
给定元组本身的列表
pd.DataFrame.from_records()
将元组的每个元素视为列的值(如果列列表中没有包含datetime列,则会引发错误)。
给定一本定义为
{r[0]: (r[1], r[2], r[3]) for r in rs}
(其中
rs
pd.DataFrame.from\ u records()
返回一个数据帧,其中每列的每个字段中的每个值都是NaN。我也试过用列表代替元组(
{r[0]: [r[1], r[2], r[3]] for r in rs}
)但结果是一样的。我已经仔细检查过了-源元组中的值基本上都是已定义的浮点值,没有nan或none。设置
coerce_float
不会改变什么。
{r[0]: {'A': r[1], 'B': r[2], 'C': r[3]} for r in rs}
)结果是一样的——都是南。
更新:下面是一个例子:
dts = [
datetime(2018, 1, 1, 0, 0, 0, 0, timezone.utc),
datetime(2018, 1, 2, 0, 0, 0, 0, timezone.utc),
datetime(2018, 1, 3, 0, 0, 0, 0, timezone.utc)
]
dti = pd.DatetimeIndex(dts, tz=timezone.utc)
rs = [
(datetime(2018, 1, 1, 0, 0, 0, 0, timezone.utc), 0.1, 0.2, 0.3),
(datetime(2018, 1, 2, 0, 0, 0, 0, timezone.utc), 0.4, 0.5, 0.6),
(datetime(2018, 1, 3, 0, 0, 0, 0, timezone.utc), 0.7, 0.8, 0.9)
]
# ...
dtf = pd.DataFrame.from_records(rs, index=dti, columns=['A', 'B', 'C'], coerce_float=True)
print(dtf)
应该导致
A B C
2008-01-01 00:00:00+00:00 0.1 0.2 0.3
2008-01-02 00:00:00+00:00 0.3 0.5 0.6
2008-01-03 00:00:00+00:00 0.7 0.8 0.9
AssertionError: 3 columns passed, passed data had 4 columns
如果你跑这条路。我应该写什么来代替
# ...
from_records
在给定输入的情况下达到预期的结果?