我有一个巨大的csv文件,大约是200 GB。我试着用块来运行它们,这样我的vscode就不会崩溃。目标是找出列"queryId“中有多少唯一变量。
我就是这么做的。
if __name__ == "__main__":
main_df = []
for df in pd.read_csv("file", chunksize = 10000):
ids = df.queryId.unique()
main_df.append(ids)
uniqueids = pd.unique(main_df)
number_of_uniqueids = len(uniqueids)
print("Number of Unique Ids:", number_of_uniqueids)
代码以TypeError: unhashable type: 'numpy.ndarray'
结束。我认为这是因为我的main_df列表中有一堆类似于dtype=object的东西。如何解决这个问题,使我的main_df列表只有queryIds,比如"553b52fb-4575-47b9-a67e-9bf53d03cc93"?
发布于 2022-01-21 08:25:34
错误来自pd.unique(main_df)
,因为输入不能是多维数组而是一维数组.我得到了下面的堆栈跟踪。
pandas/_libs/hashtable_class_helper.pxi in pandas._libs.hashtable.PyObjectHashTable.unique()
pandas/_libs/hashtable_class_helper.pxi in pandas._libs.hashtable.PyObjectHashTable._unique()
TypeError: unhashable type: 'numpy.ndarray'
下面的代码不会抛出错误。在这里,我使用NumPy将每个块中的唯一I附加到一个append
数组中。也在CSV样本上测试过。
import numpy as np
main_df = np.array([])
for df in pd.read_csv("/content/sample_data/california_housing_train.csv", chunksize = 100):
ids = df.total_bedrooms.unique()
main_df = np.append(main_df,ids)
uniqueids = pd.unique(main_df.flatten())
number_of_uniqueids = len(uniqueids)
print("Number of Unique Ids:", number_of_uniqueids)
输出:
Number of Unique Ids: 1848
https://stackoverflow.com/questions/70798084
复制相似问题