2017-02-27 30 views
1

我有格式的CSV從CSV加載的隨機樣本與熊貓

Team, Player 

我想要做的就是應用過濾器的田徑隊,再取3名玩家隨機子集每隊。

因此,舉例來說,我的CSV樣子:

Man Utd, Ryan Giggs 
Man Utd, Paul Scholes 
Man Utd, Paul Ince 
Man Utd, Danny Pugh 
Liverpool, Steven Gerrard 
Liverpool, Kenny Dalglish 
... 

我想每隊由3名隨機玩家的XLS到結束,只有在那裏是小於的情況下1或2 3例如,

Man Utd, Paul Scholes 
Man Utd, Paul Ince 
Man Utd, Danny Pugh 
Liverpool, Steven Gerrard 
Liverpool, Kenny Dalglish 

我開始使用XLRD,我的原始帖子是here

我現在正在嘗試使用熊貓,因爲我相信這將會更靈活地應對未來。

因此,在僞代碼是我想要做的是:

foreach(team in csv) 
    print random 3 players + team they are assigned to 

我一直在尋找通過熊貓,並試圖找到這樣做的最佳方法,但我找不到類似的東西是什麼我想要這樣做(這對Google來說很難!)。這是我迄今爲止的嘗試:

import pandas as pd 
from collections import defaultdict 
import csv as csv 


columns = defaultdict(list) # each value in each column is appended to a list 

with open('C:\\Users\\ADMIN\\Desktop\\CSV_1.csv') as f: 
    reader = csv.DictReader(f) # read rows into a dictionary format 
    for row in reader: # read a row as {column1: value1, column2: value2,...} 
     print(row) 
     #for (k,v) in row.items(): # go over each column name and value 
     # columns[k].append(v) # append the value into the appropriate list 
           # based on column name k 

所以我已經評論了最後兩行,因爲我不太確定是否需要。我現在每行都打印出來,所以我只需要爲每個足球隊選擇一個隨機的3排(或者在少的情況下選擇1或2)。

我該如何做到這一點?任何提示/技巧?

謝謝。

回答

2

首先使用更加優化read_csv

import pandas as pd 

df = pd.read_csv('DataFrame') 

現在,作爲一個隨便舉個例子,使用lambda通過隨機數據框獲得一個隨機子集(替換「X」與LivFC爲例):

In [] 
df= pd.DataFrame() 
df['x'] = np.arange(0, 10, 1) 
df['y'] = np.arange(0, 10, 1) 
df['x'] = df['x'].astype(str) 
df['y'] = df['y'].astype(str) 

df['x'].ix[np.random.random_integers(0, len(df), 10)][:3] 

Out [382]: 
0 0 
3 3 
7 7 
Name: x, dtype: object 

這會讓你更熟悉的大熊貓,但與0.16.x版本開始,現在有一個DataFrame.sample法內置:

df = pandas.DataFrame(data) 

# Randomly sample 70% of your dataframe 
df_0.7 = df.sample(frac=0.7) 

# Randomly sample 7 elements from your dataframe 
df_7 = df.sample(n=7) 
For either approach above, you can get the rest of the rows by doing: 

df_rest = df.loc[~df.index.isin(df_0.7.index)] 
+0

感謝您的迴應,非常有教育意義。似乎這兩種解決方案都需要從數據框中獲得70%的數據 - 而不確保每個團隊都在輸出數據集中表示。我想確保每隊返回3名球員。有沒有辦法做到這一點 ? –

+0

確保通過在df ['This']中執行子查詢,這將會非常高效,因爲DataFrames會爲這些任務實現布爾值掩碼。這樣你可以構建一個具有你想要的功能的DataFrame。也考慮接受它是否回答了你的問題。 – SerialDev