পান্ডাস ডাটাফ্রেমে এলোমেলো সারি নির্বাচন


159

পান্ডাসের ডেটা ফ্রেম থেকে এলোমেলো সারি নির্বাচন করার কোনও উপায় আছে কি?

আর-এ, গাড়ী প্যাকেজটি ব্যবহার করে, একটি দরকারী ফাংশন রয়েছে some(x, n)যা মাথার অনুরূপ তবে নির্বাচন করে, উদাহরণস্বরূপ, এক্স থেকে র্যান্ডম এ 10 সারি।

আমি স্লাইসিং ডকুমেন্টেশনগুলিও দেখেছি এবং এর সমতুল্য কিছুই নেই বলে মনে হচ্ছে।

হালনাগাদ

এখন 20 সংস্করণ ব্যবহার করা হচ্ছে There একটি নমুনা পদ্ধতি রয়েছে।

df.sample(n)


1
আপনি যদি আকারের চেয়ে বেশি যেখানে স্যাম্পলটি খুঁজছেন তবে ব্যবহার করুন df.sample(N, replace=True)। আরও বিশদ এখানে
cs95

উত্তর:


57

এটার মতো কিছু?

import random

def some(x, n):
    return x.ix[random.sample(x.index, n)]

দ্রষ্টব্য: পান্ডাস v0.20.0 অনুসারে, লেবেল ভিত্তিক সূচকের পক্ষে অবমূল্যায়ন ix করা হয়েছেloc


8
ধন্যবাদ @ নিউমিরো আমি কাজ করেছি যে কাজ df.ix[np.random.random_integers(0, len(df), 10)]করবে।
জন

7
আপনি যদি নম্পুটি ব্যবহার করতে চান তবে আপনি এটি করতেও পারেন df.ix[np.random.choice(df.index, 10)]
naught101

7
অন্য কোনও পোস্টের কেউ উল্লেখ করেছেন যে np.random.choiceদ্বিগুণ দ্রুত গতিতে রয়েছেrandom.sample
ফানি

5
আপনি যদি np.random.choice ব্যবহার করেন তবে আপনাকে প্রতিস্থাপন = মিথ্যা নির্দিষ্ট করতে হবে, অন্যথায় আপনি নকল সারি পাবেন!
স্ট্যাম্যাক্স

2
আমার মনে হয় ".ix" অবমূল্যায়ন করা হয়েছে, এবং আপনার লেবেল ভিত্তিক সূচকের জন্য .loc ব্যবহার করা উচিত
compguy24

266

পান্ডাস সংস্করণ 0.16.1এবং তার সাথে, এখন DataFrame.sample অন্তর্নির্মিত একটি পদ্ধতি রয়েছে :

import pandas

df = pandas.DataFrame(pandas.np.random.random(100))

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

# Randomly sample 7 elements from your dataframe
df_elements = df.sample(n=7)

উপরের উভয় পদ্ধতির জন্য, আপনি বাকী সারিগুলি তা করে পেতে পারেন:

df_rest = df.loc[~df.index.isin(df_percent.index)]

df_0.7একটি বৈধ নাম নয়। তাছাড়া, আমি প্রতিস্থাপন করার পরামর্শ দিই df_rest = df.loc[~df.index.isin(df_0_7.index)]সঙ্গে df_rest = df.loc[df.index.difference(df_0_7.index)]
পিট্রো ব্যাটিস্টন

@ পেট্রোবাটিস্টন ধন্যবাদ আমি উত্তরটি আরও পরিষ্কার করার চেষ্টা করছিলাম, তবে আমি একমত হয়েছি যে একটি অ-কার্যকারী উদাহরণটি পরিষ্কার নয়। পার্থক্য টিপ সঙ্গে দুর্দান্ত। যদিও, আমি এখনও স্লাইসিং লিখতে পছন্দ করি যাতে আমি এটি "আমার নমুনার সূচকে না" সূচক হিসাবে পড়ি। এর সাথে কি পারফরম্যান্স বাড়ছে difference()?
রায়ানজডিলন

1
@ আরিনজডিলন বাকি একটি টাইপো ছিল, আমি এটি ঠিক করেছিলাম। পদ্ধতিটি সম্পর্কে, আমি আসলে আমার পরামর্শটি ফিরিয়ে নিচ্ছি, প্রকৃতপক্ষে এটি কিছুটা কম দক্ষ। df_percent.index.get_indexer(df.index) == -1পরিবর্তে আরও বেশি দক্ষ (তবে আরও কুশ্রী) ...
পিয়েট্রো ব্যাটিস্টন

18

sample

V0.20.0 অনুসারে, আপনি ব্যবহার করতে পারেন pd.DataFrame.sample, যা নির্দিষ্ট সংখ্যক সারিগুলির একটি এলোমেলো নমুনা বা সারিগুলির শতাংশের ফিরিয়ে আনতে ব্যবহার করা যেতে পারে:

df = df.sample(n=k)     # k rows
df = df.sample(frac=k)  # int(len(df.index) * k) rows

পুনরুত্পাদনযোগ্যতার জন্য, আপনি random_stateব্যবহারের সমতুল্য একটি পূর্ণসংখ্যা নির্দিষ্ট করতে পারেন np.ramdom.seed। সুতরাং, উদাহরণস্বরূপ, সেটিংয়ের পরিবর্তে np.random.seed = 0আপনি এটি করতে পারেন:

df = df.sample(n=k, random_state=0)

7

এটি করার সর্বোত্তম উপায়টি এলোমেলো মডিউল থেকে নমুনা ফাংশন সহ,

import numpy as np
import pandas as pd
from random import sample

# given data frame df

# create random index
rindex =  np.array(sample(xrange(len(df)), 10))

# get 10 random rows from df
dfr = df.ix[rindex]

4

প্রকৃতপক্ষে এটি আপনাকে বারবার সূচকগুলি দেবে np.random.random_integers(0, len(df), N)যেখানে Nএকটি বড় সংখ্যা।


3

লাইনের নীচে এলোমেলোভাবে প্রতিস্থাপন ছাড়াই ডেটাফ্রেম ডিএফ থেকে মোট বিদ্যমান সারি সংখ্যাগুলির মধ্যে সারিগুলির n সংখ্যা নির্বাচন করবে।

df=df.take(np.random.permutation(len(df))[:n])

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.