2017-06-12 287 views
1

上一篇文章的延續。以前,我曾幫助使用Pandas在數據框中創建新列,並且每個值都會根據另一列的值表示分解值或唯一值。我在一個測試用例上使用了它,並且它可以成功運行,但是我有一個更大的日誌和htm文件來執行相同的過程。我有12個日誌文件(每個月),並將它們合併後,我得到一個17Gb文件。我想分解每個用戶名。我一直在研究使用Dask,但是,我無法複製排序的功能並將因數分解爲我想要的Dask數據幀。嘗試使用Dask,繼續使用熊貓還是嘗試使用MySQL數據庫來操作17GB文件會更好嗎?熊貓大CSV

import pandas as pd 
import numpy as np 
#import dask.dataframe as pf 
df = pd.read_csv('example2.csv', header=0, dtype='unicode') 
df_count = df['fruit'].value_counts() 
df.sort_values(['fruit'], ascending=True, inplace=True) 
sorting the column fruit  
df.reset_index(drop=True, inplace=True) 
f, u = pd.factorize(df.fruit.values) 
n = np.core.defchararray.add('Fruit', f.astype(str)) 
df = df.assign(NewCol=n) 
#print(df) 
df.to_csv('output.csv') 
+0

你可能要考慮PySpark:http://spark.apache.org/docs/2.1.0/api/python/pyspark.html – Tim

+0

是否有可能啓動與熊貓或Dask一起出去,只是在Dask輸出使用熊貓的功能? –

回答

1

它會更好嘗試使用DASK,繼續與熊貓或與MySQL數據庫來處理一個17GB文件試試?

這個問題的答案取決於很多事情,可能過於籠統,無法在Stack Overflow上得到很好的答案。

不過,也有您帶來了更易於回答

幾個具體問題如何因式分解列?

這裏最簡單的方法就是分類列:

df = df.categorize(columns=['fruit']) 

如何做一個列

您可以始終將列在索引中我有點獨特的價值觀,這將導致一種排序。但是請注意,在分佈式設置中排序可能會非常昂貴。

但是,如果您想要使用少量選項對列進行排序,那麼您可能會找到唯一值,對這些內存進行排序,然後將這些值加回到數據幀中。像下面的內容可能會奏效:

unique_fruit = df.fruit.drop_duplicates().compute() # this is now a pandas series 
unique_fruit = unique_fruit.sort_values() 
numbers = pd.Series(unique_fruit.index, index=unique_fruit.values, name='fruit') 

df = df.merge(numbers.to_frame(), left_on='fruit', right_index=True)