gpt4 book ai didi

pandas - 在具有空值但没有nan的elasticsearch中索引 Pandas 数据框

转载 作者:行者123 更新时间:2023-12-02 22:47:41 25 4
gpt4 key购买 nike

我在 elasticsearch 中索引来自 pandas 数据框的数据。我为某些 es 字段设置了 null_value,但没有为其他字段设置。如何删除没有 null_value 的列,但保留那些带有(将值设置为 None)的列?

es 映射:

    "properties": {
"sa_start_date": {"type": "date", "null_value": "1970-01-01T00:00:00+00:00"},
"location_name": {"type": "text"},

代码:

cols_with_null_value = ['sa_start_date']
orig = [{
'meter_id': 'M1',
'sa_start_date': '',
'location_name': ''
},{
'meter_id': 'M1',
'sa_start_date': '',
'location_name': 'a'
}]
df = pd.DataFrame.from_dict(orig)

df['sa_start_date'] = df['sa_start_date'].apply(pd.to_datetime, utc=True, errors='coerce')
df.replace({'': np.nan}, inplace=True)
df:
meter_id sa_start_date location_name
0 M1 NaT NaN
1 M1 NaT a

elasticsearch 索引所需的字典:

{"meter_id": M1, "sa_start_date": None}
{"meter_id": M1, "sa_start_date": None, "location_name": "a"}

注意带有 NaN 的 location_name 单元格没有被索引,但是带有 NaT 的 sa_start_date 单元格被索引。我试过很多事情,一个比一个更荒谬;没有什么值得展示的。任何想法表示赞赏!

试过这个但是 Nones 和 NaNs 一起被丢弃了..

df[null_value_cols] = df[null_value_cols].replace({np.nan: None})
df:
meter_id sa_start_date location_name
0 M1 None NaN
1 M1 None a
for row in df.iterrows():
ser = row[1]
ser.dropna(inplace=True)

lc = {k: v for k, v in dict(row[1]).items()}

lc: {'meter_id': 'M1'}
lc: {'meter_id': 'M1', 'location_name': 'a'}

最佳答案

不要在这里使用 .dropna()。它会删除整行或整列;并且您想保留除空位置名称之外的所有内容。

您可以通过以下方式执行此操作:

df.replace({'': None}, inplace=True) # replace with None instead of np.nan

for idx,row in df.iterrows():
lc = {k:v for k,v in row.items() if not (k == 'location_name' and v is None)}
print(lc)

结果:

{'meter_id': 'M1', 'sa_start_date': None}
{'meter_id': 'M1', 'sa_start_date': None, 'location_name': 'a'}

关于pandas - 在具有空值但没有nan的elasticsearch中索引 Pandas 数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59806405/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com