正如标题所示,在使用填充后,我在数据框中留下了空值。这是数据框相关部分的示例:
data = {'03_15_2019': {0: u'tariff rail rates for unit and shuttle train shipments1',
1: np.nan,
2: np.nan,
3: np.nan,
4: u'unit train'},
u'bushel2': {0: np.nan, 1: np.nan, 2: np.nan, 3: u' bushel2', 4: np.nan},
u'destination_region3': {0: np.nan,
1: np.nan,
2: np.nan,
3: u'Destination region3',
4: np.nan},
u'fuel_surcharge_per_car': {0: np.nan,
1: u'Fuel surcharge per car',
2: np.nan,
3: np.nan,
4: np.nan},
u'metric_ton': {0: np.nan,
1: np.nan,
2: u'Tariff plus surcharge per:',
3: u' metric ton',
4: np.nan},
u'origin_region3': {0: np.nan, 1: np.nan, 2: np.nan, 3: u'Origin region3', 4: np.nan},
u'rate_car': {0: np.nan, 1: np.nan, 2: u'Tariff', 3: u'rate/car', 4: np.nan},
u'y_y4': {0: np.nan, 1: u'Percent', 2: u'change', 3: u'Y/Y4', 4: np.nan}}
df = pd.DataFrame.from_dict(data)
这是我要使用的代码:
df[df.columns[0]].ffill(inplace = True)
df[df.columns[0]] = df[df.columns[0]].str.lower()
values = df.index[df[df.columns[0]].str.contains("train")].tolist()
错误在第三行返回为:
ValueError: cannot index with vector containing NA / NaN values
当我检查数据框时,它会显示以下信息:
0 tariff rail rates for unit and shuttle train s...
1 tariff rail rates for unit and shuttle train s...
2 tariff rail rates for unit and shuttle train s...
3 NaN
4 unit train
奇怪的是,如果我要在jupyter笔记本的新单元格中重新运行上面的代码,它将起作用。仅在第一次运行时它不起作用。
答案 0 :(得分:0)
df[df.columns[0]].ffill(inplace = True)
此行替换第一列中的NaN。当您在此行之后检查df时,将不会是您在上面发布的内容。
答案 1 :(得分:0)
pandas.DataFrame.ffill
标记用于向前填充,这意味着如果列的第一项为NaN
,则不会填充(不会向前传播)。
所以基本上:
data = {'a': [1,2,None, None], 'b': [None, 2, None, 4]}
df = pd.DataFrame(data)
df.ffill()
将导致:
a b
0 1.0 NaN
1 2.0 2.0
2 2.0 2.0
3 2.0 4.0
您可能希望在ffill
之后加上fillna
,以不同方式处理这些情况