如何像在 .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)