pandas - 熊猫数据框什么是处理选择行然后在没有SettingwithCopyWarning的情况下修改列的最佳方法
问题描述
我有一个大的 dataFrame 对象,我想先选择一些行,然后转换时间戳列:
def choose_loc(data, lat, lon, lat_diff, lon_diff):
data = data.loc[(data.lat > (lat - lat_diff)) & (data.lat < (lat + lat_diff)) & (data.lon > (lon - lon_diff)) & (data.lon < (lon + lon_diff))]
return data
column_names = np.genfromtxt(header_path, dtype=str, delimiter='\t')
dtypes = {"lat": np.float64, "lon": np.float64, "timeStamp": np.int64}
pos_lat = 0.0
pos_lon = 0.0
size_lat = 0.05
size_lon = 0.05
data = pd.read_csv(filePath, sep='\t', dtype=dtypes, header=None, names=column_names, error_bad_lines=False)
data = choose_loc(data, pos_lat, pos_lon, size_lat / 2, size_lon / 2)
data.loc[:, 'timeStamp'] = pd.to_datetime(data.loc[:, 'timeStamp'], unit='ms')
当我运行上面的代码时,我在最后一行得到 SettingwithCopyWarning。我真的不明白为什么,因为我使用 .loc 并且不应该复制任何内容。我可以通过运行使其工作data = choose_loc(data, ...).copy()
,但文件很大,我想避免复制以节省时间和内存。所以我该怎么做?
解决方案
尝试这个:
data = data.loc[(data.lat > (lat - lat_diff)) & (data.lat < (lat + lat_diff)) & (data.lon > (lon - lon_diff)) & (data.lon < (lon + lon_diff))].copy()
推荐阅读
- linux - 关于此错误的问题:未在此范围内声明“bdget”
- c++ - 使用读写器方法的 C++ 中的多线程数据库半途而废
- flutter - 在 Flutter 中使用 ListView Builder 加载不同的 PDF 文档
- c# - 我希望我的玩家(角色)找到他站立的节点
- sql - 如何从nodejs express将对象数组发送到存储过程?
- python - 检查是否有一种方法可以在任意范围 F 内从 S 点到达 G 点
- bash - [已解决] execl("/bin/bash", ...) 的不可预知的行为
- excel - 使用 Dateif 公式求和
- javascript - Frida 将对象转换为字符串列表
- python-3.x - 是否可以参数化由点表示法调用的方法?