You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在while循环中用两个Pandas Series创建无NaN的DataFrame

问题描述

我尝试在while循环中利用两个Pandas Series创建DataFrame。打印两个Series时,得到如下结果:

Print(a)
0 0.159175
Name: Time, dtype: float64
0 0.531096
Name: Time, dtype: float64
0 0.688536
Name: Time, dtype: float64
0 0.883937

Print(b)
0 18
Name: Inventory, dtype: int64
0 14
Name: Inventory, dtype: int64
0 12
Name: Inventory, dtype: int64
0 9

我使用以下代码尝试创建DataFrame:

df = pd.DataFrame()

while s.clock <= 2.0:
    s.advance_time()
    a = pd.Series([s.clock], name = 'Time')
    b = pd.Series([s.inventory], name = 'Inventory')
    df= pd.concat([df, pd.DataFrame(a),pd.DataFrame(b)], axis =0, ignore_index=True)
    df

得到的df输出如下:

Time  Inventory
0   0.159175        NaN
1        NaN       18.0
2   0.531096        NaN
3        NaN       14.0
4   0.688536        NaN
5        NaN       12.0
6   0.883937        NaN
7        NaN        9.0
8   0.999041        NaN
9        NaN        6.0

如何消除DataFrame中的NaN值,使每行同时包含Series a和b的有效值?

解决方法

出现NaN的核心原因是:你每次循环都把Time和Inventory的Series分别作为独立行拼接到DataFrame,导致两者交替出现,自然会产生空值。下面是几种实用的解决办法:

方法1:直接创建单行DataFrame拼接

不用分开处理两个Series,直接把当前循环的clock和inventory整合成一个单行的DataFrame,再拼到主DataFrame中:

df = pd.DataFrame()

while s.clock <= 2.0:
    s.advance_time()
    # 生成包含两列的单行DataFrame
    single_row = pd.DataFrame({'Time': [s.clock], 'Inventory': [s.inventory]})
    df = pd.concat([df, single_row], ignore_index=True)

方法2:先收集数据到列表,最后一次性生成DataFrame

这种方法效率更高,避免循环内反复拼接DataFrame(Pandas的拼接操作有一定开销):

times = []
inventories = []

while s.clock <= 2.0:
    s.advance_time()
    times.append(s.clock)
    inventories.append(s.inventory)

# 用收集好的列表直接创建DataFrame
df = pd.DataFrame({'Time': times, 'Inventory': inventories})

方法3:合并同一次循环的两个Series

如果一定要保留使用Series的方式,可以把同一次循环生成的a和b按列合并成单行DataFrame,再拼接到主df:

df = pd.DataFrame()

while s.clock <= 2.0:
    s.advance_time()
    a = pd.Series([s.clock], name='Time')
    b = pd.Series([s.inventory], name='Inventory')
    # 按列合并两个Series,得到单行数据
    single_row = pd.concat([a, b], axis=1)
    df = pd.concat([df, single_row], ignore_index=True)

内容的提问来源于stack exchange,提问作者Lonestar101

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 23:35:49