我同意@Demi Lune。
我更改了操作码
male_only()
和
female_only()
__init__()
方法,因为我认为您不想调用
pd.read_csv()
方法每次创建新对象时。所以
仅限男性()
仅限女性()
方法总是返回新对象,它不会影响其他对象。
import pandas as pd
# Added for creating file on memory.
import io
csv = '''Person,Sex,Score
p1,M,1
p2,M,2
p3,M,3
p4,F,4
p5,F,5
p6,F,6'''
file = io.StringIO(csv)
class MyData:
def __init__ (self, file=None, data=None):
import pandas as pd
if file:
self.data = pd.read_csv(file)
else:
self.data = data
self.Person = self.data['Person']
self.Sex = self.data['Sex']
self.Score = self.data['Score']
def copy_d(self):
return MyData(data=self.data.copy())
def male_only(self):
d = self.copy_d()
d.data = self.data[self.Sex=="M"]
d.Person = self.Person[self.Sex=="M"]
d.Score = self.Score[self.Sex=="M"]
d.Sex = self.Sex[self.Sex=="M"]
return d
def female_only(self):
d = self.copy_d()
d.data = self.data[self.Sex=="F"]
d.Person = self.Person[self.Sex=="F"]
d.Score = self.Score[self.Sex=="F"]
d.Sex = self.Sex[self.Sex=="F"]
return d
d = MyData(file)
print(d.female_only().data)
# Person Sex Score
# 3 p4 F 4
# 4 p5 F 5
# 5 p6 F 6
print(d.male_only().data)
# Person Sex Score
# 0 p1 M 1
# 1 p2 M 2
# 2 p3 M 3
print(d.data)
# Person Sex Score
# 0 p1 M 1
# 1 p2 M 2
# 2 p3 M 3
# 3 p4 F 4
# 4 p5 F 5
# 5 p6 F 6
但如果你只是在用
pandas.DataFrame
,另一种方法是使用bare
. 首先,在大多数情况下,
熊猫.DataFrame
Person
,
Sex
Score
因为它已经存在于DATAFRAM对象中。
即:
import pandas as pd
import numpy as np
df = pd.DataFrame(np.eye(3,3), columns=['Person', 'Sex', 'Score'])
# `df` already has these properteis.
df.Person
df.Sex
df.Score
# In [986]: df.Person
# Out[986]:
# 0 1.0
# 1 0.0
# 2 0.0
# Name: Person, dtype: float64
# In [987]: df.Sex
# Out[987]:
# 0 0.0
# 1 1.0
# 2 0.0
# Name: Sex, dtype: float64
# In [988]: df.Score
# Out[988]:
# 0 0.0
# 1 0.0
# 2 1.0
# Name: Score, dtype: float64
所以,你的
仅限男性()
仅限女性()
方法的编写方式如下。
import pandas as pd
# Added for creating file on memory.
import io
csv = '''Person,Sex,Score
p1,M,1
p2,M,2
p3,M,3
p4,F,4
p5,F,5
p6,F,6'''
file = io.StringIO(csv)
def male_only(df):
return df[df.Sex=='M']
def female_only(df):
return df[df.Sex=='F']
df = pd.read_csv(file)
male_only(df)
# In [1034]: male_only(df)
# Out[1037]:
# Person Sex Score
# 0 p1 M 1
# 1 p2 M 2
# 2 p3 M 3
female_only(df)
# In [1038]: female_only(df)
# Out[1041]:
# Person Sex Score
# 3 p4 F 4
# 4 p5 F 5
# 5 p6 F 6
我希望它能帮助你。