[英]How extract specific number pattern from a list inside column of pandas dataframe
我有如下数据框,我需要对其进行转换
从comma,
前的第一个数字中提取并仅保留 3 个小数点,第二个数字也仅保留 3 个小数点。
逗号应替换为:
如果数字只有两个小数点,再加一个零,使其成为小数点后三个。
输入
df
[151.20732,-33.86785]
[81.67732,-09.86]
[1.2890,43.8]
[567.200,33.867]
[557.21,33.86]
预计 Output
151.207:-33.867
81.677:-09.860
1.289:43.800
567.200:33.867
557.210,33.860
如何在 pandas 中做到这一点?
这比我想象的要难
def func(y,n):
if y < 0 :
return "%0.3f" % (-(y * 10 ** n // -1 / 10 ** n))
else :
return "%0.3f" % (y * 10 ** n // 1 / 10 ** n)
df.apply(lambda x : ':'.join([ func (y, 3) for y in x]) )
Out[86]:
0 151.207:33.867
1 81.677:9.860
2 1.289:43.800
3 567.200:33.867
4 557.210:33.860
dtype: object
输入
data = [[151.20732,-33.86785],
[81.67732,-09.86],
[1.2890,43.8],
[567.200,33.867],
[557.21,33.86]]
df = pd.Series(data)
DataFrame 输入选项 1:
data = [[[151.20732,-33.86785]],
[[81.67732,-09.86]],
[[1.2890,43.8]],
[[567.200,33.867]],
[[557.21,33.86]]]
df = pd.DataFrame(data, columns=['geo'])
DataFrame 输入选项 2:
literal_eval 用于读取包含列表的 CSV 文件,否则将列表作为单个字符串读取。
import ast
literal = lambda x: ast.literal_eval(x)
data = pd.read_csv('/Test_data.csv', converters={'geo.geometry.coordinates': literal})
df = pd.DataFrame(data, columns=['geo.geometry.coordinates'])
df.rename(columns = {'geo.geometry.coordinates':'geo'}, inplace = True)
算法:
import math
def trunc(f,d):
# Truncate float (f) to d decimal places, unless NaN
return 'nan' if math.isnan(f) else f"{int(f*10**d)/10**d:0.{d}f}"
df['geo_neo'] = df.apply(lambda r: trunc(r['geo'][0], 3) + ':'
+ trunc(r['geo'][1], 3), axis = 1)
DataFrame Output:
geo geo_neo
0 [151.20732, -33.86785] 151.207:-33.867
1 [81.67732, -9.86] 81.677:-9.860
2 [1.289, 43.8] 1.289:43.800
3 [567.2, 33.867] 567.200:33.867
4 [557.21, 33.86] 557.210:33.860
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.