我正在尝试使用Pandas清理数据框,我需要提取出具有标识符,名称和点数的行,并将其放入名为标识符,名称和num_pts的新列中。
之后,我需要对新列进行布尔索引。
我尝试根据这样的另一列创建一个新列
hurricane_df['new_col'] = hurricane_df['col']
,但是在尝试索引new_col时,它也会同时索引原始col。
这是我目前拥有的
这就是数据之后的样子
谢谢您的帮助
import os
import pandas as pd
from urllib.request import urlretrieve
url = "https://www.nhc.noaa.gov/data/hurdat/hurdat2-1851-2017-050118.txt"
local_fname = "hurdat2.txt"
if not os.path.exists("hurdat2.txt"):
urlretrieve(url, local_fname)
low_memory=False
hurricane_df = pd.read_csv("hurdat2.txt",engine='python',
delim_whitespace=True,names =
['date','time','record_id','status','latitude','longitude','max_wind',
'min_pressure','ne34ktr','se34ktr','sw34ktr','nw34ktr','ne50ktr','se50ktr',
'sw50ktr','nw50ktr','ne64ktr','se64ktr','sw64ktr','nw64ktr']
,header = None)
hurricane_df["identifier"] = hurricane_df["date"].copy()
hurricane_df[(hurricane_df['identifier'].str.contains('AL'))]
edit:我最终想要做的是用标识符,名称和点数提取那些行,并将它们放在名为标识符,名称和num_pts的新列中。因此,我首先将date列添加到标识符列中,然后使用仅以AL开头的字符串来解析标识符列,以仅获取标识符行。
尽管发生了什么事,但日期栏仍在更改。
执行完此操作后,我想用跟踪点填充该行,删除仅包含标识符信息的行(该行也将出现在新的日期列中,该列也将从日期中提取出来,并取AL(〜))仅仅获取标识符信息,然后将列重新排列到数据框的前面(df [['c4','c5','c1','c2','c3'])。
答案 0 :(得分:0)
这只能部分回答您的问题,但希望对您有所帮助:
我尝试根据像hurricane_df ['new_col'] = hurricane_df ['col']这样的另一列创建一个新列,但是当尝试索引new_col时,它也会索引原始col。
为避免此错误,请使用
hurricane_df["new_column"] = hurricane_df["old_column"].copy()
在Python中,执行variable_a = variable_b
不会复制variable_b
的值并将其分配给variable_a
。它将创建一个新名称,该新名称绑定到绑定到variable_a
的同一对象。
例如,如果您这样做
a = 2
b = a
a = a + 1
print(b)
您将获得一个3
。这称为“引用传递”;其他语言具有“按价值传递”的功能。
如果您更详细地说明您的最终目标是什么,我们可能会找到一种方法来帮助您(随着新列听起来有些奇怪,将其中包含的行添加到数据框中,也许还有更好的方法来执行您的操作首先要做的事情。