如何像在 .loc 中那样使用 .reindex 传递类似列表的方法已被弃用?
How to pass list-like using .reindex as doing it in .loc has been deprecated?
我有一个包含多个字段的数据框,我想使用一些列值重新创建一个新的数据框作为 JSON 对象:
Street City State Zip_Code
24 St. Kansas City KS 12345-213
... ... ... ....
为了做到这一点,我在 python:
中像这样使用 .loc 和 .apply
def address_x(vals):
val = {
'street': None if not str(vals[0]) else vals[0],
'city': None if not str(vals[1]) else vals[1],
'state': None if not str(vals[2]) else state(vals[2]),
'postal_code': postal_code(str(vals[3]))
}
return val
def transform (dataset):
df = pd.DataFrame()
df['address'] = dataset.loc[['Street', 'City', 'State', 'Zip_Code']].apply(address_x, axis=1)
return df
obj = s3client.get_object(Bucket=bucket, Key=key)
new_df = transform(pd.read_csv(io.BytesIO(obj['Body'].read()), delimiter='|', sep='|'))
new_df.to_json('TEST.json', orient='records', lines=True)
这给了我这个错误消息 KeyError:'不再支持将列表喜欢传递给 .loc 或 [] 以及任何缺少的标签,请参阅 https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#deprecate-loc-reindex-listlike'
我正在尝试使用 df['address'] = dataset.reindex(['STREET', 'CITY', 'STATE', 'ZIP CODE']).apply(lambda x: address_x(x))
但只是将所有值存储为 null 而不是这样:
{"address":{
"street": "24 St.",
"city": "Kansas City",
"state": "Kansas",
"postal_code": 12345-213}
}
输入是使用“|”的常规 csv 文件作为分隔符和它所具有的所有列之间,这只是示例中的 4 个。
然后我将其存储为 json,当前输出如下所示:每个记录的 {"address":{"street":null,"city":null,"state":null,"postal_code":null}}
,而不是使用 csv 值填充 json。
更改为:
def address_x(vals):
val = {
'street': None if not str(vals['Street']) else vals['Street'],
'city': None if not str(vals['City']) else vals['City'],
'state': None if not str(vals['State']) else state(vals['State']),
'postal_code': postal_code(str(vals['Zip_Code']))
}
return val
df['address'] = dataset[['Street', 'City', 'State', 'Zip_Code']].apply(address_x, axis=1)
我有一个包含多个字段的数据框,我想使用一些列值重新创建一个新的数据框作为 JSON 对象:
Street City State Zip_Code
24 St. Kansas City KS 12345-213
... ... ... ....
为了做到这一点,我在 python:
中像这样使用 .loc 和 .applydef address_x(vals):
val = {
'street': None if not str(vals[0]) else vals[0],
'city': None if not str(vals[1]) else vals[1],
'state': None if not str(vals[2]) else state(vals[2]),
'postal_code': postal_code(str(vals[3]))
}
return val
def transform (dataset):
df = pd.DataFrame()
df['address'] = dataset.loc[['Street', 'City', 'State', 'Zip_Code']].apply(address_x, axis=1)
return df
obj = s3client.get_object(Bucket=bucket, Key=key)
new_df = transform(pd.read_csv(io.BytesIO(obj['Body'].read()), delimiter='|', sep='|'))
new_df.to_json('TEST.json', orient='records', lines=True)
这给了我这个错误消息 KeyError:'不再支持将列表喜欢传递给 .loc 或 [] 以及任何缺少的标签,请参阅 https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#deprecate-loc-reindex-listlike'
我正在尝试使用 df['address'] = dataset.reindex(['STREET', 'CITY', 'STATE', 'ZIP CODE']).apply(lambda x: address_x(x))
但只是将所有值存储为 null 而不是这样:
{"address":{
"street": "24 St.",
"city": "Kansas City",
"state": "Kansas",
"postal_code": 12345-213}
}
输入是使用“|”的常规 csv 文件作为分隔符和它所具有的所有列之间,这只是示例中的 4 个。
然后我将其存储为 json,当前输出如下所示:每个记录的 {"address":{"street":null,"city":null,"state":null,"postal_code":null}}
,而不是使用 csv 值填充 json。
更改为:
def address_x(vals):
val = {
'street': None if not str(vals['Street']) else vals['Street'],
'city': None if not str(vals['City']) else vals['City'],
'state': None if not str(vals['State']) else state(vals['State']),
'postal_code': postal_code(str(vals['Zip_Code']))
}
return val
df['address'] = dataset[['Street', 'City', 'State', 'Zip_Code']].apply(address_x, axis=1)