首页 > 解决方案 > 替换python的方法以从python中的特定列中删除文本不起作用

问题描述

我想替换“磁偏角”列中的“磁场\nD”。我正在从 API 生成这个 csv 文件。文件看起来像这样。

从 API 生成的 CSV 文件

import requests
import json
import pandas as pd
import os
import csv
from pathlib import Path

parameters = {
    "latd": 88, # [deg]
    "latm": 00, # [deg]
    "lats": 00, # [deg]
    "lond": 75, # [deg]
    "lonm": 00, # [deg]
    "lons": 00, # [deg]
    "elev" : 00, # [km]
    "year" : None, # [YYYY]
    "month" : '07', # [MM]
    "day": '01', # [DD]
    "Ein": 'D'  # [Model]
}

hostname = "https://api.geomagnetism.ga.gov.au/agrf"
df_1=pd.DataFrame()
for year in range(1985, 2025):
    try:
        parameters["year"] = year
        response = requests.get(hostname, params= dict(parameters, ps=str(year)))
        # extract JSON payload of response as Python dictionary
        json_payload = response.json()
        # raise an Exception if we encoutnered any HTTP error codes like 404
        response.raise_for_status()
    except requests.exceptions.ConnectionError as e:
        # handle any typo errors in url or endpoint, or just patchy internet connection
        print(e)
    except requests.exceptions.HTTPError as e:
        # handle HTTP error codes in the response
        print(e, json_payload['error'])
    except requests.exceptions.RequestException as e:
        # general error handling
        print(e, json_payload['error'])
    else:
        json_payload = response.json()
        #print(json.dumps(json_payload, indent=4, sort_keys=True))
        df = pd.DataFrame(json_payload)
        print(df)
        print(df.loc[['D'],['magneticFields']])
        new_row = {
            "SourceFile": hostname,
            "Year": year,
            "Magnetic Declination": df.loc[['D'],['magneticFields']],
            "Latitude": 88,
            "Longitude": 75
        }
        df_1 = df_1.append(new_row, ignore_index=True)
    df_1 = df_1[['Year', 'Latitude', 'Longitude','Magnetic Declination','SourceFile']]
    #df_1['Magnetic Declination'] = df_1['Magnetic Declination'].apply(lambda x: x.replace(r"magneticFields\nD ", ""))
    #df_1['Magnetic Declination'] = df_1['Magnetic Declination'].str.replace(r"..magneticFields\nD.....","",regex=True)
    #df_1['Magnetic Declination'] = df_1['Magnetic Declination'].str.replace('magneticFields\nD', '').astype(str)
    df_1["Magnetic Declination"] = df_1["Magnetic Declination"].apply(lambda x: x.replace(" deg", ""))
    df_1.to_csv('magnetic_declination_australia_1.csv',index=False)

尝试了所有方法,但没有一个有效。

df_1['Magnetic Declination'] = df_1['Magnetic Declination'].apply(lambda x: x.replace(r"magneticFields\nD ", ""))
df_1['Magnetic Declination'] = df_1['Magnetic Declination'].str.replace(r"..magneticFields\nD.....","",regex=True)
df_1['Magnetic Declination'] = df_1['Magnetic Declination'].str.replace('magneticFields\nD', '').astype(str)

输出应该是这样的。

最终输出

谁能帮我解决这个问题?从此处附加的 API 生成的 csv 文件。

标签: pythonreplace

解决方案


你在df.loc[['D'],['magneticFields']]. 您正在使用pandas.core.frame.DataFrame类型作为字符串。df.loc[['D'],['magneticFields']]返回 DataFrame 并且您直接使用它而不更改它。

df.loc[['D'],['magneticFields']]归还你

    magneticFields
D       69.650 deg

现在我们可以从这个 DataFrame 中获取magneticFieldscolumn 和D(First row),就像从其他普通 DataFrame 中一样df.loc[['D'],['magneticFields']]["magneticFields"][0]

这是您的最终代码:

df = pd.DataFrame(json_payload)
print(df)
print(df.loc[['D'],['magneticFields']]["magneticFields"][0])
new_row = {
    "SourceFile": hostname,
    "Year": year,
    "Magnetic Declination": df.loc[['D'],['magneticFields']]["magneticFields"][0],
    "Latitude": 88,
    "Longitude": 75
}
df_1 = df_1.append(new_row, ignore_index=True)

而且你不必像你做的那样做任何其他花哨的事情哈哈。

如果对您有帮助,也不要忘记将其标记为已接受。


推荐阅读