第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

使用 pandas 有效地計(jì)算大型數(shù)據(jù)幀的每個(gè)時(shí)間條柱的值

使用 pandas 有效地計(jì)算大型數(shù)據(jù)幀的每個(gè)時(shí)間條柱的值

ibeautiful 2022-08-16 15:34:32
我有多個(gè)大型數(shù)據(jù)幀(大約3GB csv文件,每個(gè)大約1.5億行),其中包含Unix樣式的時(shí)間戳和隨機(jī)生成的觀察ID。每個(gè)觀察可以/將在不同的時(shí)間多次發(fā)生。它們看起來像這樣:    time_utc    obs_id0   1564617600  aabthssv1   1564617601  vvvx7ths2   1564618501  optnhfsa3   1564619678  aabthssv4   1564619998  abtzsnwe         ...我現(xiàn)在想為了分析觀測的時(shí)間發(fā)展,得到一個(gè)數(shù)據(jù)幀,其中包含每個(gè)觀測值ID的列和可以更改的時(shí)間箱的行,例如1小時(shí),如下所示:time_bin aabthssv vvvx7ths optnhfsa  ...1               1        1        12               1        0        0               ...我試圖通過創(chuàng)建一個(gè)時(shí)間戳起點(diǎn)的numpy數(shù)組來做到這一點(diǎn),然后將value_counts添加到一個(gè)新的空數(shù)據(jù)幀中,以選擇該箱中的所有行。這會(huì)遇到內(nèi)存錯(cuò)誤。我已經(jīng)嘗試了更多的預(yù)清理,但即使將原始數(shù)據(jù)的大小減少三分之一(因此2GB,1億行)仍然會(huì)發(fā)生內(nèi)存錯(cuò)誤。SLICE_SIZE = 3600 # example value of 1hslice_startpoints = np.arange(START_TIME, END_TIME+1-SLICE_SIZE, SLICE_SIZE)agg_df = pd.DataFrame()for timeslice in slice_startpoints:        temp_slice = raw_data[raw_data['time_utc'].between(timeslice, timeslice + SLICE_SIZE)]        temp_counts = temp_slice['obs_id'].value_counts()        agg_df = agg_df.append(temp_counts)        temp_index = raw_data[raw_data['time_utc'].between(timeslice, timeslice + SLICE_SIZE)].index        raw_data.drop(temp_index, inplace=True)有沒有辦法更有效地做到這一點(diǎn),或者更確切地說,讓它根本有效?編輯:我根據(jù)使用交叉表的建議找到了有效的方法來做到這一點(diǎn)。文件大小不需要減小。使用以下代碼得出的結(jié)果正是我正在尋找的結(jié)果。df['binned'] = pd.cut(df['time_utc'], bins=slice_startpoints, include_lowest=True, labels=slice_startpoints[1:])df.groupby('binned')['obs_id'].value_counts().unstack().fillna(0)
查看完整描述

2 回答

?
猛跑小豬

TA貢獻(xiàn)1858條經(jīng)驗(yàn) 獲得超8個(gè)贊

您可以嘗試使用交叉表進(jìn)行剪切:


slice_startpoints = np.arange(START_TIME, END_TIME+SLICE_SIZE, SLICE_SIZE)

print (slice_startpoints)


df['binned'] = pd.cut(df['time_utc'], 

                      bins=slice_startpoints, 

                      include_lowest=True,

                      labels=slice_startpoints[1:])


df = pd.crosstab(df['binned'], df['obs_id'])


查看完整回答
反對(duì) 回復(fù) 2022-08-16
?
尚方寶劍之說

TA貢獻(xiàn)1788條經(jīng)驗(yàn) 獲得超4個(gè)贊

您可以使用“塊”迭代器讀取大型.csv,然后對(duì)塊而不是整個(gè).csv文件執(zhí)行計(jì)算。塊大小定義單個(gè)塊中的行數(shù)。這樣,您就有了一個(gè)很好的句柄來控制內(nèi)存使用情況。缺點(diǎn)是,您將必須添加一些邏輯來合并塊的結(jié)果。


import pandas as pd

df_chunk = pd.read_csv('file.csv', chunksize=1000)

for chunk in df_chunk:

    print(chunk)


查看完整回答
反對(duì) 回復(fù) 2022-08-16
  • 2 回答
  • 0 關(guān)注
  • 120 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)