首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >替换dataframe Python中的值

替换dataframe Python中的值
EN

Stack Overflow用户
提问于 2016-12-30 22:10:45
回答 5查看 2.6K关注 0票数 3
代码语言:javascript
复制
Lon_X        Lat_Y
5,234234     6,3234234
5,234234     6,3234234
5,234234     6,3234234
5,234234     6,3234234
5,234234     6,3234234

我有像上面那样的熊猫/数据中心的GPS坐标。但是,它们使用逗号分隔符。利用熊猫将这些转换成浮动GPS坐标的最佳方法是什么?

代码语言:javascript
复制
for item in frame.Lon_X:
    float(item.replace(",", ".")) # makes the conversion but does not store it back

我尝试过迭代项函数,但是看起来非常慢,并给出了一个警告,我不太明白:

代码语言:javascript
复制
for index, value in frame.Lon_X.iteritems():
    frame.Lon_X[index] = float(value.replace(",", "."))

请参阅文档中的注意事项:从ipykernel导入的http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy作为应用程序

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2016-12-30 22:13:52

您可以使用应用程序图

代码语言:javascript
复制
df[["Lon_X", "Lat_Y"]] = df[["Lon_X", "Lat_Y"]].applymap(lambda x: float(x.replace(",", ".")))
df

下面是关于这些替代方法的一些基准,to_float_inplace比所有其他方法都要快得多:

数据

代码语言:javascript
复制
df = pd.DataFrame({"Lon_X": ["5,234234" for i in range(1000000)], "Lat_Y": ["6,3234234" for i in range(1000000)]})
代码语言:javascript
复制
# to_float_inplace
def to_float_inplace(x):
    x[:] = x.str.replace(',', '.').astype(float)

%timeit df.apply(to_float_inplace)
# 1 loops, best of 3: 269 ms per loop

# applymap + astype
%timeit df.applymap(lambda x: x.replace(",", ".")).astype(float)
# 1 loops, best of 3: 1.26 s per loop

# to_float
def to_float(x):
    return x.str.replace(',', '.').astype(float)

%timeit df.apply(to_float)
# 1 loops, best of 3: 1.47 s per loop

# applymap + float
%timeit df.applymap(lambda x: float(x.replace(",", ".")))
# 1 loops, best of 3: 1.75 s per loop

# replace with regex
%timeit df.replace(',', '.', regex=True).astype(float)
# 1 loops, best of 3: 1.79 s per loop
票数 1
EN

Stack Overflow用户

发布于 2016-12-30 22:35:31

您可以将熊猫的矢量化方法应用到一个轴上:

代码语言:javascript
复制
def to_float_inplace(x):
    x[:] = x.str.replace(',', '.').astype(float)

df.apply(to_float_inplace)
票数 1
EN

Stack Overflow用户

发布于 2016-12-30 22:59:47

可以跳过使用apply,直接用replace方法替换为regex=True

代码语言:javascript
复制
df.replace(',', '.', regex=True).astype(float)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41403301

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档