python - 替换python的方法以从python中的特定列中删除文本不起作用
问题描述
我想替换“磁偏角”列中的“磁场\nD”。我正在从 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 文件。
解决方案
你在df.loc[['D'],['magneticFields']]
. 您正在使用pandas.core.frame.DataFrame
类型作为字符串。df.loc[['D'],['magneticFields']]
返回 DataFrame 并且您直接使用它而不更改它。
df.loc[['D'],['magneticFields']]
归还你
magneticFields
D 69.650 deg
现在我们可以从这个 DataFrame 中获取magneticFields
column 和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)
而且你不必像你做的那样做任何其他花哨的事情哈哈。
如果对您有帮助,也不要忘记将其标记为已接受。
推荐阅读
- c# - 按接口中定义的顺序对实现类方法进行排序
- regex - 在 Elixir 中,如何将字符串拆分为非单词字符是分隔符,但还允许使用 +、- 等数学运算符?
- python - numpy.linspace - X 轴上的错误标签
- c++ - 为什么 constexpr 的性能比正常表达式差?
- c++ - 用于向量处理的多线程
- node.js - 用于托管 Node.js 应用程序的 .env 文件的替代方案
- laravel - 是否可以防止数据库原始数据被黑客入侵?
- shopify - Shopify 购买-js-sdk 元字段
- java - 如何构建正则表达式以查找特定单词
- c++ - 递归无序映射