Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中,如何创建频率表并在加载数据块时进行更新?_Python_Large Data_Large Files - Fatal编程技术网

在Python中,如何创建频率表并在加载数据块时进行更新?

在Python中,如何创建频率表并在加载数据块时进行更新?,python,large-data,large-files,Python,Large Data,Large Files,我有一个庞大的表格(几十亿行),我需要分析其中的两个数值变量,a)创建一个频率表,b)创建分布图 VarA的范围为0.00到1.00(增量为0.01) VarB分布在0.00左右(增量为0.01) 我想迭代读取1000行,然后更新频率表。我尝试了以下代码: c_尺寸=1000 结果={'A':dict(),'B':dict()} def更新指令(键,val): 如果val不在结果[键]中: 结果[key][val]=1 其他: 结果[key][val]+=1 对于pd.read_csv('da

我有一个庞大的表格(几十亿行),我需要分析其中的两个数值变量,a)创建一个频率表,b)创建分布图

VarA的范围为0.00到1.00(增量为0.01)
VarB分布在0.00左右(增量为0.01)

我想迭代读取1000行,然后更新频率表。我尝试了以下代码:


c_尺寸=1000
结果={'A':dict(),'B':dict()}
def更新指令(键,val):
如果val不在结果[键]中:
结果[key][val]=1
其他:
结果[key][val]+=1
对于pd.read_csv('data.csv',name=['ValA','ValB'],skiprows=10,chunksize=c_size)中的数据块:
对于数据块中的行:
valA,valB=行
更新目录('A',valA)
更新目录('B',valB)
打印(结果['A'])
打印(结果['B'])
编辑
  • 更新代码并提供@peter du的建议

  • 为了简化处理过程,我认为应该将处理后的值存储在字典中,而不是存储在两个单独的表中

    要在十亿行中每1000行迭代一次,我认为应该使用生成器机制(请参阅)

    我在下面展示了一个小例子

    input_data = [[1, 2], [2, 3], [3, 4], [2, 4]]
    result = {'A': dict(), 'B': dict()}
    
    def update_dict(key, val):
        if val not in result[key]:
             result[key][val] = 1
        else:
             result[key][val] += 1
    
    
    # Since the list is not too big, I use for loop to iterate.
    # However, you can apply the generator mechanism for the code below.
    for row in input_data:
        valA, valB = row
        update_dict('A', valA)
        update_dict('B', valB)
    
    print(result['A'])
    >>> {1: 1, 2: 2, 3: 1}
    
    print(result['B'])
    >>> {2: 1, 3: 1, 4: 2}
    
    # Then, you can use these two dictionaries to create two separate tables
    # You can also join two tables together using Pandas data frame
    

    要绘制分布图,我建议使用seaborn()绘制漂亮的图。

    以下是工作代码。谢谢你,彼得·杜,谢谢你的帮助

    c_size=1000
    结果={'VarA':dict(),'VarB':dict()}
    def更新指令(键,val):
    如果val不在结果[键]中:
    结果[key][val]=1
    其他:
    结果[key][val]+=1
    reader=pd.read\u csv('file.csv',name=['VarA','VarB',skiprows=10,chunksize=c\u size)
    对于i,枚举(读取器)中的数据块:
    对于data_chunk.values中的行:
    valA,valB=行
    更新目录('VarA',np.round(valA,2))
    更新目录('VarB',np.round(valB,2))
    
    I get:“valA,valB=行值错误:太多值无法解压缩(预期为2)”我可以知道您的输入数据及其类型吗?我在本地机器上用显示的
    input\u data
    测试了代码,结果很好。我用上次使用的代码更新了问题。基本上,数据是一个包含两个数值(几十亿行)的大型CSV表。我知道,您的
    data\u chunk
    可能是一种数据帧。因此,当您遍历它时,它只获取每行的索引。您可以通过打印
    数据块
    来测试它。我建议将带有for循环的行修改为
    for data\u chunk中的行。值:
    ,以便您可以接收处理的np.ndarray。