【问题标题】:Split an integer cell into two columns based on digit location, python根据数字位置将整数单元格分成两列,python
【发布时间】:2021-11-24 12:49:37
【问题描述】:

我正在处理我想在 GIS 软件中绘制的数千个 csv GPS 文件。为此,我需要十进制度,但数据是以十进制度数收集的。我有一个函数可以将十进制分转换成我想要的格式,但是每个 csv 文件中的数据布局需要操作。

Here is an image of the dataframe which requires manipulation。我希望第 0 列和第 2 列的格式是 57 10.7240 N 分成三列。由于 57 和 10 之间没有空格,并且小数点在正确的位置,我正在努力寻找一种方法来在 7 位置拆分整数并将 57 作为新列插入数据框中。这可以手动完成,但我有超过 10,000 个 csv 文件,每个文件有 600 行是不可行的。

任何关于如何将整数从 5710.7242 拆分为 57 10.7242 N 的帮助将不胜感激,因为这是我在整个转换工作之前要更正的代码的最后一部分。

【问题讨论】:

    标签: python pandas gis dd


    【解决方案1】:

    我的解决方案在迭代滥用方面效率不高,但你可以试试这个:

    import pandas as pd
    
    data = [[5710.7240,'N',917.3222,'W'],[710.7239,'N',917.3225,'W']]
    df = pd.DataFrame(data, columns=['L2','NS','L4','EW'])
    
    split_L1, split_L2 = [],[]
    for i, row in df.iterrows():
        split_L1.append(int(int(df['L2'][i])/100))
        split_L2.append(round(df['L2'][i]-split_L1[i]*100, 5))
    df.insert(0,'L1',split_L1, True)
    df['L2'] = split_L2
    
    split_L3, split_L4 = [],[]
    for i, row in df.iterrows():
        split_L3.append(int(int(df['L4'][i])/100))
        split_L4.append(round(df['L4'][i]-split_L3[i]*100, 5))
    df.insert(3,'L3',split_L3, True)
    df['L4'] = split_L4
    
    df
    

    输入:

    输出:

    【讨论】:

    • 谢谢,这正是我需要的,并且在遍历所有 csv 文件时表现良好。你能解释为什么除以 100 然后乘以 100 的方法有效吗?我很难理解你是如何想出这种方法的
    • 除以 100 并将其转换为整数,这只是截断数字部分的简单方法。 5710.7240/100 >> 57.107240 |整数(57.107240)>> 57 | 5710.7240 - (57 * 100) = 5710.7240 - 57000 >> 10.7240
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多