- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在处理从 NASA 火球数据 API ( https://cneos.jpl.nasa.gov/fireballs/ ) 导入的纬度/经度数据
lat
/lon
数据只有正值lat-dir
/lon-dir
lat
值转换为负数(乘以 -1)lon
值转换为负数以下大致是我创建数据框的方式:
import requests
import pandas as pd
response = requests.get('https://ssd-api.jpl.nasa.gov/fireball.api')
j = response.json()
df = pd.DataFrame.from_dict(j[u'data'])
print( j[u'fields'] )
[u'date', u'energy', u'impact-e', u'lat', u'lat-dir', u'lon', u'lon-dir', u'alt', u'vel']
print( df.head() )
0 1 2 3 4 5 6 7 8
0 2019-12-06 10:19:57 4.6 0.15 3.3 S 37.7 W 19.5 None
1 2019-12-03 06:46:27 4.2 0.14 5.6 N 52.2 W 61.5 None
2 2019-11-28 20:30:54 2.7 0.095 35.7 N 31.7 W 35 13.0
3 2019-11-28 13:22:10 2.6 0.092 None None None None None None
4 2019-11-28 11:55:02 2.5 0.089 22.1 S 25.7 E 22.5 24.7
<小时/>
我尝试过的代码行:
尝试使用df.apply()
- 尽管通过我的搜索,我认为您无法轻松地以这种方式引用两列...
df['lat'] = df['lat'].apply(lambda x: x * -1 if (df['lat-dir'][x] == 'S'))
<小时/>
for i, row in df.iterrows():
if (row['lat-dir'] == 'S'):
df['lat'][i].apply(lambda x: x*-1)
为此,我得到“numpy.float64”对象没有属性“apply”?
<小时/>尝试使用屏蔽:
if( df['lon-dir'] == 'W'):
df['lon'] * -1
<小时/>
但坦率地说,我很困惑接下来要做什么关于敷面膜的事情。
编辑:
dfDate['lat'] = dfDate['lat'].apply(lambda row: row['lon'] * -1 , axis = 1 )
根据评论也尝试过这一点。
最佳答案
是的,通过以下任一方式:
A) 使用矢量化蒙版。 ==
没有矢量化; .eq(...)
是。对于矢量化表达式,请使用 dfDate['lon-dir'].eq('W')
。然后对这些行上的“lon”列取反。
B) 使用 apply()
按行:dfDate['lon'] = dfDate.apply(lambda row: ..., axis=1)
- 在你的 lambda 中选择性地否定 row['lon']
基于值row['lon-dir']
- 你的原因apply
调用失败是您需要应用于整个列/系列,而不是单个条目。所以:df['lat'].apply(lambda: ..., axis=1)
lat-dir
/lon-dir
本质上是符号列,您可以在读入它们时将它们转换为+1/-1。
代码:
首先是您需要修复的代码的一些问题:
df.columns = j['fields']
response.json()
读取 JSON进入pd.DataFrame.from_dict()
是一种痛苦;您的数据框列变成字符串/“对象”,而不是将浮点列转换为 float 。理想情况下,我们应该使用 pandas.read_json(..., dtype=...)
出于这个和其他方便的原因。None
-> Pandas /numpy nan
(为了矢量化代码,我们将优雅地编写处理 nan
而不是不断抛出烦人的 TypeError: unsupported operand type(s) for *: 'NoneType' and 'int'
)。您可以[使用 astype(...)
执行此操作, pd.to_numeric()
或df.fillna(value=pd.np.nan, inplace=True)
df2 = df.dropna(how='any', inplace=False)
# 可能不与..., inplace=True
。请注意,这会保留行索引,因此您始终可以将处理 df2 的结果插入到最后的 df 中。阅读dropna
doc 并找出您想要在哪个确切点删除 nan。df2 = df[['date','energy','impact-e','lat','lat-dir','lon','lon-dir']].dropna(how='any', inplace=False)
将纬度/经度列转换为 +/-1 符号的几种方法:
A1)如果你想要“正确”的、知道纳米的方式,并且不会被纳米窒息......
df2['lat'] = df2['lat-dir'].map({'N': +1, 'S': -1})
df2['lon'] = df2['lon-dir'].map({'E': +1, 'W': -1})
A2) ...or a fast-and-dirty way:
(-1) ** df2['lat-dir'].eq('S')
(-1) ** df2['lon-dir'].eq('W')
B) 但是您可以在一行中完成这一切apply()
功能:
def fixup_latlon_signs(row):
row['lat'] = row['lat'] * (-1) ** (row['lat-dir'] == 'S')
row['lon'] = row['lon'] * (-1) ** (row['lon-dir'] == 'W')
return row
df2.apply(fixup_latlon_signs, axis=1)
# Then insert the non-NA rows we processed back into the parent dataframe:
df.update(df2)
# Strictly we can drop 'lat-dir','lon-dir' now...
关于python - 根据另一列的掩码修改 Pandas 数据框列的符号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59232584/
前言: 有时候,一个数据库有多个帐号,包括数据库管理员,开发人员,运维支撑人员等,可能有很多帐号都有比较大的权限,例如DDL操作权限(创建,修改,删除存储过程,创建,修改,删除表等),账户多了,管理
这个问题已经有答案了: Condition variable deadlock (2 个回答) 已关闭 5 年前。 在研究多线程时,我编写了以下代码,但在屏幕上没有观察到输出。我在这里做错了什么?我期
复制代码 代码如下: <IfModule mod_rewrite.c> RewriteEngineOn RewriteBase/ #将www.zzvips.com跳转到www.zzv
复制代码 代码如下: <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / # 把 www.zzvips.com
复制代码 代码如下: Const T_GATEWAY = "1.1.1.1" '网关 Const T_NEWDNS1 = "2.2.2.2" 'DNS1
0. 修改索引 大文本字段支持排序 PUT http://localhost:9200/lrc_blog/_mapping //请求体 { "properties": { "title": { "t
仅 react 当状态发生变化时重新渲染 . 那么为什么我会直接看到我对真实 DOM 所做的更改呢? 我知道我正在修改真实的 DOM,但是当我根本没有改变状态时触发重新渲染的是什么。 import R
Xcode beta 5 推出 @FetchRequest对于 SwiftUI。 我有一个 View ,它有一个 @FetchRequest . NSFetchRequest是在管理器中创建的,该管理
关闭。这个问题需要更多 focused .它目前不接受答案。 想改进这个问题?更新问题,使其仅关注一个问题 editing this post . 7年前关闭。 Improve this questi
我有一个表达式[text][id]应替换为链接 text 解决方案是( id 是整数) $s = preg_replace("/\[([^\]]+)(\]*)\]\[([0-9]+)\]/","$1$
我在 repo 中有一个文件,我不想让任何人更新。 我能做什么? 最佳答案 你想要svn锁:http://www.linxit.de/svnbook/en/1.2/svn.ref.svn.c.lock
说我有项目 list 。我想导出到csv,但在此之前我想做一些计算/修改。 基本上,设置如下所示: PS C:\Files> gci Directory: C:\Files Mode
我有一个非常简单的问题 - 是否可以修改 Java API 的源代码,例如Junit,JABX ? 我知道这似乎是一个非常愚蠢的问题,但它一直困扰着我一段时间。 最佳答案 如果您可以掌握源代码,那么请
我有一个带有变量/列的小标题,其中包括不同形状的小标题列表。我想为其中一个变量中的每个(子)标题添加一个变量/列。 例如此类数据 library("tibble") aaa aaa # A tibb
我有几个菜单,可以在单击时向当前链接添加变量。这是一个例子: 1 2 3 x y z 我的问题是,如果我选择“y”2次,它会添加“&cord=y”2次。相反,我希望它替
我有两个项目:一个服务项目和一个服务安装程序项目。服务项目具有适合我的产品的装配信息。它包括公司信息和正确的服务名称。一旦服务实际安装,所有这些似乎都会被忽略。安装服务时,它使用在服务安装程序的ini
以下代码何时可能产生副作用? @some = map { s/xxx/y/; $_ } @some; perlcritic 将其解释为危险的,因为例如: @other = map { s/xxx/y/
我想知道以下哪种解决方案更好:我想修改一些 .class 文件,我意识到有两种方法可以做到这一点: 反编译.class文件,修改它,最后再次编译。 - 直接用十六进制编辑器修改。 谢谢 最佳答案 在这
这是我的按钮代码 onclick 我希望我的程序等待用户单击一个 JPanel,并且当用户单击 JPanel 时,它应该在控制台上打印其名称。 此按钮代码未显示输出 JPopupMenu popu
我正在使用一个具有“getName()”方法的特定 API。 getName() 返回一个字符串。是否可以修改该字符串? API 中不包含修饰符方法,并且 String getName() 返回的是私
我是一名优秀的程序员,十分优秀!