Python 使用pandas从CSV加载随机样本

Python 使用pandas从CSV加载随机样本,python,python-3.x,csv,pandas,random,Python,Python 3.x,Csv,Pandas,Random,我有一个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 ... 我希望最终得到一个XLS,由每支球队的3名随机球员组成,如果少于3名球

我有一个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
...
我希望最终得到一个XLS,由每支球队的3名随机球员组成,如果少于3名球员,则只有1名或2名,例如

Man Utd, Paul Scholes
Man Utd, Paul Ince
Man Utd, Danny Pugh
Liverpool, Steven Gerrard
Liverpool, Kenny Dalglish
我开始使用XLRD,我的原始帖子是

我现在正在尝试使用熊猫,因为我相信这将在未来更加灵活

因此,在psuedocode中,我想做的是:

foreach(team in csv)
   print random 3 players + team they are assigned to
我一直在寻找熊猫,并试图找到最好的方法来做到这一点,但我找不到任何类似于我想做的事情(谷歌很难做到!)。以下是我迄今为止的尝试:

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行)

我怎样才能做到这一点?有什么窍门吗


谢谢。

首先使用经过更好优化的
阅读\u csv

import pandas as pd

df = pd.read_csv('DataFrame') 
现在,作为一个随机示例,使用lambda通过随机化数据帧获得随机子集(例如,用LivFC替换“x”):

这将使您更加熟悉pandas,但是从版本
0.16.x
开始,现在有一个
DataFrame。示例
方法内置:

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)]

谢谢你的回复,很有教育意义。例如,这两种解决方案似乎都将从数据帧中获取70%——而不确保每个团队都在输出数据集中表示。我想确保每队有3名球员返回。有没有办法做到这一点?确保通过像df['this']中那样执行子查询,这也将是高效的,因为数据帧为这些任务实现布尔屏蔽。这样,您就可以构建具有所需功能的数据帧。如果回答了你的问题,也要考虑接受。
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)]