【问题标题】:refine, average, round data python细化,平均,圆形数据python
【发布时间】:2012-12-25 11:34:17
【问题描述】:

我有一个大数据集(见下面的示例格式),我需要做以下思考:

  1. 识别出现在第 1、2、5 列上的重复值 - 如果全部重复,那么我需要删除冗余行并平均第 8 列中的值(这对于我将发布的代码是成功的 -
  2. 在第一步之后,我想将第 1,2 列的值四舍五入为整数(无小数)
  3. 我想重新引入第 3、4、6 和 7 列 -
    第 3、6 和 7 列需要有一个我将指定的特定值(例如,3 应该全为 0,6 全为 1,第 7 列全为 1)(类似于输入文件) 第 4 列需要增加 1,具体取决于第 4 列上不同值的数量)(类似于输入文件

这是一个示例输入文件:数据(文件名)

564991.15   7371277.89  0   1   1530    1   1   16.0225
564991.15   7371277.89  0   1   8250    1   1   14.4405
564991.15   7371277.89  0   2   1530    1   1   14.8637
564991.15   7371277.89  0   2   8250    1   1   14.8918
564991.17   7371277.89  0   3   1530    1   1   16.0002
564991.17   7371277.89  0   3   8250    1   1   15.4333
564991.04   7371276.76  0   4   1530    1   1   14.73
564991.04   7371276.76  0   4   8250    1   1   15.6138
564991.04   7371276.76  0   5   1530    1   1   16.2453
564991.04   7371276.76  0   5   8250    1   1   15.6138

这是我要知道的代码(目前我在 calc 中补充)

import os
import numpy as np
import pandas as pd
datadirectory = '/media/data'
os.chdir = 'datadirectory'
df = pd.read_csv('/media/data/data.dat')
sorted_data = df.groupby(["X.1","X.2","X.5"])["X.8"].mean().reset_index()
tuple_data = [tuple(x) for x in sorted_data.values]
datas = np.asarray(tuple_data)
np.savetxt('sorted_data_rounded.dat', datas, fmt='%s', delimiter='\t')

但他只给了我 4 列,没有四舍五入的数据....

【问题讨论】:

    标签: python numpy pandas average


    【解决方案1】:

    加一半并投射astypeint可能会稍微快一些:

    df = pd.read_csv('data.dat', header=None, sep='\s+')
    
    In [2]: df
    Out[2]: 
               0           1  2  3     4  5  6        7
    0  564991.15  7371277.89  0  1  1530  1  1  16.0225
    1  564991.15  7371277.89  0  1  8250  1  1  14.4405
    2  564991.15  7371277.89  0  2  1530  1  1  14.8637
    3  564991.15  7371277.89  0  2  8250  1  1  14.8918
    4  564991.17  7371277.89  0  3  1530  1  1  16.0002
    5  564991.17  7371277.89  0  3  8250  1  1  15.4333
    6  564991.04  7371276.76  0  4  1530  1  1  14.7300
    7  564991.04  7371276.76  0  4  8250  1  1  15.6138
    8  564991.04  7371276.76  0  5  1530  1  1  16.2453
    9  564991.04  7371276.76  0  5  8250  1  1  15.6138
    
    df1 = df.groupby([0, 1, 4])[7].mean().reset_index()
    df1['ints'] = (df1[7] + 0.5).astype(int)
    
    In [5]: df1
    Out[5]: 
               0           1     4         7  ints
    0  564991.04  7371276.76  1530  15.48765    15
    1  564991.04  7371276.76  8250  15.61380    16
    2  564991.15  7371277.89  1530  15.44310    15
    3  564991.15  7371277.89  8250  14.66615    15
    4  564991.17  7371277.89  1530  16.00020    16
    5  564991.17  7371277.89  8250  15.43330    15
    

    注意:你可以使用DataFrame方法to_csv保存一个DataFrame。

    【讨论】:

    • 谢谢 - 这是一个很大的帮助,我更新了代码,我几乎就在那里 - 我只需要获得所需的顺序(我总是可以通过重新排列 numpy 数组来做到这一点,但我猜测使用 pandas 更有效)
    • 我想我可能会继续前进 - 我会在我回到办公室时发布代码......现在必须移动
    【解决方案2】:

    使用圆函数()

    x = round(number to round , number of decimal places to round the number to )
    

    【讨论】:

    • 我试过了,但对数组不起作用(我上面例子中的数据)
    【解决方案3】:

    这段代码完全符合我的要求:

    import os
    import numpy as np
    import pandas as pd 
    
    datadirectory = '/media/DATA'
    os.chdir( datadirectory)
    
    df = pd.read_csv('/media/DATA/data.dat', sep="\\s+", header=None)
    df1 = df.groupby(["X.1","X.2","X.5"])["X.8"].mean().reset_index() 
    df1['X.3'] = df["X.3"]
    df1['X.4']=df["X.4"]
    df1['X.6']=df["X.6"]
    df1['X.7']=df["X.7"]
    sorted_data = df1.reindex_axis(sorted(df1.columns), axis=1)
    tuple_data = [tuple(x) for x in sorted_data.values]
    datas = np.asarray(tuple_data)
    
    dfround = df
    dfround['X.1'] = df["X.1"].astype(int)
    dfround['X.2'] = df["X.2"].astype(int)
    df2 = dfround.groupby(["X.1","X.2","X.5"])["X.8"].mean().reset_index()
    df2['X.3'] = df["X.3"] #add extra columns
    df2['X.4']=df["X.4"]
    df2['X.6']=df["X.6"]
    df2['X.7']=df["X.7"]
    sorted_data2 = df2.sort_index(axis=1) #rearragne data - method 2
    tuple_data2 = [tuple(x) for x in sorted_data2.values]
    datas2 = np.asarray(tuple_data2)
    
    np.savetxt('sorted_data.dat', datas, fmt='%s', delimiter='\t') #Save the data
    np.savetxt('sorted_rounded_data.dat', datas2, fmt='%s', delimiter='\t') #Save   the data
    print ('DONE')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-22
      • 2021-05-07
      • 2020-11-06
      • 2012-05-16
      • 2017-08-22
      相关资源
      最近更新 更多