查找和替换1.数据帧使用另一个DataFram中的行中的值

2024-10-08 22:22:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我对python非常、非常陌生,正在寻找一种最好的方法来查找和更改jsonapi的列头(我已经通过pandas规范化了),并使用来自同一源的第二个api的值。 为简洁起见,我没有发布全部代码,只是发布了与数据相关的部分。你知道吗

名称\u df(查找表)

name = response.json()
df = json_normalize(name['fields'],sep="_")
name_df = df[df.columns[1:3]]
print(name_df.head()) 

        key                    label
0  field_18                Client_ID
1  field_16              Client Name
2  field_19              Client Code
3  field_26              Client Type
4  field_70              Third Party
etc...

数据表

data = response.json()
json_normalize(data)
data_df = json_normalize(data['records'],sep="_")
print(data_df.head())

field_16   field_16_raw   field_18   field_18_raw   field_19  
Amazon     Amazon         123        123            AMZ       
WallMart   WallMart       888        888            WLM       
etc...

数据_df.columns.values列

['field_16' 'field_16_raw' 'field_18' 'field_18_raw' 'field_19'
 'field_19_raw' 'field_26' 'field_26_raw' 'field_422' 'field_70'
 'field_70_raw' 'field_71' 'field_71_raw']

我需要的输出是

Client Name   Client Name_raw   Client_ID_18   Client_ID_18_raw   Client Code
Amazon        Amazon             123           123                AMZ       
WallMart      WallMart           888           888                WLM       
etc...

我一直在研究方法,但是我还没有完全能够将我找到的答案应用到我的用例中——特别是数据表中出现的原始值的复杂性,而不是查找表。我可以在这里看到解决方案的形状,但是它使用了对行而不是列的查找,所以当我尝试调整时,它不起作用。你知道吗

Elegant way to replace values in pandas.DataFrame from another DataFrame

我也在努力寻找一种方法来替换字段X的变量,而不必专门命名列。我现在正处在一个过度复杂的阶段,我肯定会有一个简单的答案。你知道吗

提前谢谢你的建议


Tags: 方法nameclientidjsonfieldamazonpandas
1条回答
网友
1楼 · 发布于 2024-10-08 22:22:38

这主要是为了我将来(向我招手)

因此,我使用了来自https://github.com/cityofaustin/knackpy的knackpy客户端和pandas的组合,将字段标题连接到标题,然后对列重新排序,格式化日期并输出到csv。 下面是我的修订版python代码:

## https://github.com/cityofaustin/knackpy
from knackpy import Knack
import json
import pandas as pd
from pandas.io.json import json_normalize

#  download data from Knack
#  will fetch records in chunks of 1000 until all records have been downloaded
#  optionally pass a rows_per_page and/or page_limit parameter to limit record count
kn = Knack( 
        obj='object_XX',
        app_id='REDACTED',
        api_key='REDACTED',
        tzinfo='Europe/London',
        page_limit=10,  #  this is the default
        rows_per_page=1000  #  this is the default
    )

#Set file paths
offline_filepath = 'C:/Directory Name/Folder Name/Save Location/'
filename = 'KNACK_filename here with no ext'

#Save the raw JSON file to Drive Backup
with open(offline_filepath+filename+'.json', 'w') as outfile:
    json.dump(kn.data, outfile)

#Flatten the data
data_df = json_normalize(kn.data,sep="_")

#Order the columns
#data_df = data_df[['Field ID','Employee','Department','Date of Birth','id']]
#data_df.sort_values(by=['Field ID'], inplace=True)

#Convert the date formats from UNIX to Date
#data_df['Date of Birth'] = pd.to_datetime(data_df['Date of Birth'],unit='ms')

#Convert and export to CSV
#Save to Drive Backup
data_df.to_csv(offline_filepath+filename+'.csv',index=False,date_format="%Y-%m-%d")

我为knack数据库中的每个对象在一个文件夹中设置了这个脚本,并使用一个批处理文件按顺序运行文件夹中的所有脚本。你知道吗

How to create a batch file to run all python files in the same directory

cd /D C:\Directory\Folder Name\Script Folder

@echo off

for %%i in (*.py) do start "" /b /wait python "%%i"

希望这对任何人都有帮助!你知道吗

相关问题 更多 >

    热门问题