pandas怎么对groupby之后的每个分组应⽤apply函数
#(1)怎样对数值列按照分组的归⼀化
#(2)怎样取每个分组的TOP N数据
‘’’
X的归⼀化:
X(normalized) = (X当前值-最⼩值)/(X最⼤值-X最⼩值)
‘’’
import pandas as pd
import os
os.chdir(r"C:\Users\Hans\Desktop\data_analysis\test_data\movie")
ratings = pd.read_csv("ratings.dat",sep ="::",engine ="python",names ="UserID::MovieID::Rating::Timestamp".split("::"))
ratings.head()
UserID MovieID Rating Timestamp 0111935978300760 116613978302109 219143978301968 3134084978300275 4123555978824291
def ratings_norm(df):#函数的参数是⼀个DataFrame
min_value = df["Rating"].min()
max_value = df["Rating"].max()
df["Rating_norm"]= df["Rating"].apply(lambda x:(x-min_value)/(max_value-min_value))
return df
a = upby("UserID").apply(ratings_norm)
a.head()
UserID MovieID Rating Timestamp Rating_norm 0111935978300760  1.0 1166139783021090.0 2191439783019680.0 31340849783002750.5 4123555978824291  1.0 ratings["Rating"].unique()#注
意unique函数需要()
array([5, 3, 4, 2, 1], dtype=int64)
b = ratings.loc[ratings["UserID"]==1]
b.tail()
UserID MovieID Rating Timestamp 48120285978301619 4915314978302149 50131144978302174 5116084978301398 52112464978302091
b["Rating"].unique()
array([5, 3, 4], dtype=int64)
UserID MovieID Rating Timestamp Rating_norm 0111935978300760  1.0 1166139783021090.0 2191439783019680.0 31340849783002750.5 4123555978824291  1.0
#这⾥注意,按照UserID分组后,UserID==1的组,对应的RatIng只有三个值,5,3,4
#(2)怎么取每⼀个分组的TOP N数据
file_path = r"C:\Users\Hans\Desktop\data_analysis\test_data\Beijing_2014.csv" df = pd.read_csv(file_path)
df.head()
Date Temperature(Celsius)
(high)
Temperature(Celsius)
(avg)
Temperature(Celsius)
(low)
Dew
Point(Celsius)
(high)
Dew
Point(Celsius)
(avg)
Dew
Point(Celsius)
(low)
Humidity(%)
(high)
Humidity(%)
(avg)
Humidity(%)
(low)
02014-
1-1
124-2-12-17-2044197
12014-
1-2
70-6-6-9-13745028
22014-
1-3
93-2-7-13-1864329
32014-
1-4
2-2-6-4-7-9806844
42014-
1-5
70-7-5-11-15805115
5 rows × 23 columns
#增加新的⼀列“⽉份”
from datetime import datetime
m = pd.to_datetime(df["Date"])#将时间格式转换下,都是双数字m.head()
0  2014-01-01
1  2014-01-02
2  2014-01-03
3  2014-01-04
4  2014-01-05
Name: Date, dtype: datetime64[ns]
df["month"]= pd.to_datetime(df["Date"])#添加⼀列
df.head()
#month列不是str,怎么将DataFrame的某⼀列改变格式
Date Temperature(Celsius)
(high)
Temperature(Celsius)
(avg)
Temperature(Celsius)
(low)
Dew
Point(Celsius)
(high)
Dew
Point(Celsius)
(avg)
Dew
Point(Celsius)
(low)
Humidity(%)
(high)
Humidity(%)
(avg)
Humidity(%)
(low)
02014-
1-1
124-2-12-17-2044197
12014-
1-2
70-6-6-9-13745028
22014-
1-3
93-2-7-13-1864329
32014-
1-4
2-2-6-4-7-9806844
42014-
1-5
70-7-5-11-15805115
5 rows × 24 columns
type(df["Date"][0])
str
type(df["month"][0])
pandas._libs.tslibs.timestamps.Timestamp
df = df.astype({'month':'str'})#将month列数据格式转换为字符串类型df.head()
Date Temperature(Celsius)
(high)
Temperature(Celsius)
(avg)
Temperature(Celsius)
(low)
Dew
Point(Celsius)
(high)
Dew
Point(Celsius)
(avg)
Dew
Point(Celsius)
(low)
Humidity(%)
(high)
Humidity(%)
(avg)
Humidity(%)
(low)
02014-
1-1
124-2-12-17-2044197
12014-
1-2
70-6-6-9-13745028
22014-
1-3
93-2-7-13-1864329
32014-
1-4
2-2-6-4-7-9806844
42014-
1-5
70-7-5-11-15805115
5 rows × 24 columns
#新增⼀列,年⽉不包括⽇,这样⽅便按照⽉份分组df["nian_yue"]= df["month"].str[0:7]
df.head()
Date Temperature(Celsius)
(high)
Temperature(Celsius)
(avg)
Temperature(Celsius)
(low)
Dew
Point(Celsius)
(high)
Dew
Point(Celsius)
(avg)
Dew
Point(Celsius)
(low)
Humidity(%)
(high)
Humidity(%)
(avg)
Humidity(%)
(low)
02014-
1-1
124-2-12-17-2044197
12014-
1-2
70-6-6-9-13745028
22014-
1-3
93-2-7-13-1864329
32014-
1-4
2-2-6-4-7-9806844
42014-
1-5
70-7-5-11-15805115
5 rows × 25 columns
&ic.DataFrameGroupBy object at 0x000001C565FB0E80>
def getTopN(df,topn):
return df.sort_values(by ="Temperature(Celsius)(high)")[["nian_yue","Temperature(Celsius)(high)"]][-topn:]
#sort_values默认是升序,所以最⾼的排在最后,直接按照切⽚取出最⾼的。
#为什么会报错
filepath_or_buffer,#⽂件名称
sep=',',指定分隔符。如果不指定参数,默认逗号分隔
delimiter=None,#定界符,备选分隔符(如果指定该参数,则sep参数失效)
header='infer',
names=None,
index_col=None,
usecols=None,
squeeze=False,
prefix=None,
mangle_dupe_cols=True,
dtype=None,
engine=None,
converters=None,
true_values=None,
false_values=None,
skipinitialspace=False,
skiprows=None,
skipfooter=0,
nrows=None,
na_values=None,
keep_default_na=True,
na_filter=True,
verbose=False,
skip_blank_lines=True,
parse_dates=False,
infer_datetime_format=False,
keep_date_col=False,
date_parser=None,
dayfirst=False,
iterator=False,
chunksize=None,
compression='infer',
thousands=None,
decimal=b'.',
lineterminator=None,
quotechar='"',
quoting=0,
doublequote=True,
escapechar=None,
comment=None,
encoding=None,
dialect=None,
tupleize_cols=None,
error_bad_lines=True,
warn_bad_lines=True,
delim_whitespace=False,
low_memory=True,
memory_map=False,
float_precision=None,
)
python新手代码useridfilepath_or_buffer :str,pathlib。str, pathlib.Path, py._path.local.LocalPath or any object with a read() method (such as a file handle or StringIO)可以是URL,可⽤URL类型包括:http, ftp, s3和⽂件。对于多⽂件正在准备中
本地⽂件读取实例:://localhost/path/to/table.csv
sep :str, default ‘,’
sep :str, default ‘,’
指定分隔符。如果不指定参数,则会尝试使⽤逗号分隔。分隔符长于⼀个字符并且不是‘\s+’,将使⽤python的语法分析器。并且忽略数据中的逗号。正则表达式例⼦:'\r\t'
delimiter :str, default None
定界符,备选分隔符(如果指定该参数,则sep参数失效)
delim_whitespace : boolean, default False.
指定空格(例如’ ‘或者’ ‘)是否作为分隔符使⽤,等效于设定sep='\s+'。如果这个参数设定为Ture那么delimiter 参数失效。
在新版本0.18.1⽀持
header :int or list of ints, default ‘infer’
指定⾏数⽤来作为列名,数据开始⾏数。如果⽂件中没有列名,则默认为0,否则设置为None。如果
明确设定header=0就会替换掉原来存在列名。header参数可以是⼀个list例如:[0,1,3],这个list表⽰将⽂件中的这些⾏作为列标题(意味着每⼀列有多个标题),介于中间的⾏将被忽略掉(例如本例中的2;本例中的数据1,2,4⾏将被作为多级标题出现,第3⾏数据将被丢弃,dataframe的数据从第5⾏开始。)。
注意:如果skip_blank_lines=True那么header参数忽略注释⾏和空⾏,所以header=0表⽰第⼀⾏数据⽽不是⽂件的第⼀⾏。
names : array-like, default None
⽤于结果的列名列表,如果数据⽂件中没有列标题⾏,就需要执⾏header=None。默认列表中不能出现重复,除⾮设定参数mangle_dupe_cols=True。
index_col :int or sequence or False, default None
⽤作⾏索引的列编号或者列名,如果给定⼀个序列则有多个⾏索引。
如果⽂件不规则,⾏尾有分隔符,则可以设定index_col=False来是的pandas不适⽤第⼀列作为⾏索引。
usecols : array-like, default None
返回⼀个数据⼦集,该列表中的值必须可以对应到⽂件中的位置(数字可以对应到指定的列)或者是字符传为⽂件中的列名。例如:usecols有效参数可能是[0,1,2]或者是[‘foo’, ‘bar’, ‘baz’]。使⽤这个参数可以加快加载速度并降低内存消耗。
as_recarray : boolean, default False
不赞成使⽤:该参数会在未来版本移除。请使⽤pd.read_csv(...).to_records()替代。
返回⼀个Numpy的recarray来替代DataFrame。如果该参数设定为True。将会优先squeeze参数使⽤。并且⾏索引将不再可⽤,索引列也将被忽略。
squeeze : boolean, default False
如果⽂件值包含⼀列,则返回⼀个Series
prefix :str, default None
在没有列标题时,给列添加前缀。例如:添加‘X’ 成为 X0, X1,...
mangle_dupe_cols : boolean, default True
重复的列,将‘X’...’X’表⽰为‘X.0’...’X.N’。如果设定为false则会将所有重名列覆盖。
dtype : Type name or dict of column ->type, default None
每列数据的数据类型。例如{‘a’: np.float64, ‘b’: np.int32}
engine :{‘c’, ‘python’}, optional
Parser engine to use. The C engine is faster while the python engine is currently more feature-complete.
使⽤的分析引擎。可以选择C或者是python。C引擎快但是Python引擎功能更加完备。
converters :dict, default None
列转换函数的字典。key可以是列名或者列的序号。
true_values :list, default None
Values to consider as True
false_values :list, default None
Values to consider as False
skipinitialspace : boolean, default False
忽略分隔符后的空⽩(默认为False,即不忽略).
skiprows :list-like or integer, default None
需要忽略的⾏数(从⽂件开始处算起),或需要跳过的⾏号列表(从0开始)。
skipfooter :int, default 0
从⽂件尾部开始忽略。(c引擎不⽀持)
skip_footer :int, default 0
不推荐使⽤:建议使⽤skipfooter ,功能⼀样。
nrows :int, default None
需要读取的⾏数(从⽂件头开始算起)。
na_values : scalar,str,list-like,or dict, default None
⼀组⽤于替换NA/NaN的值。如果传参,需要制定特定列的空值。默认为‘1.#IND’, ‘1.#QNAN’, ‘N/A’, ‘NA’, ‘NULL’, ‘NaN’, ‘nan’`.
keep_default_na :bool, default True
如果指定na_values参数,并且keep_default_na=False,那么默认的NaN将被覆盖,否则添加。
na_filter : boolean, default True
是否检查丢失值(空字符串或者是空值)。对于⼤⽂件来说数据集中没有空值,设定na_filter=False可以提升读取速度。
verbose : boolean, default False
是否打印各种解析器的输出信息,例如:“⾮数值列中缺失值的数量”等。
skip_blank_lines : boolean, default True
如果为True,则跳过空⾏;否则记为NaN。
parse_dates : boolean or list of ints or names or list of lists or dict, default False
boolean.True->解析索引
list of ints or names. e.g. If [1,2,3]->解析1,2,3列的值作为独⽴的⽇期列;
list of lists. e.g. If [[1,3]]->合并1,3列作为⼀个⽇期列使⽤
dict, e.g.{‘foo’ :[1,3]}->将1,3列合并,并给合并后的列起名为"foo"
infer_datetime_format : boolean, default False
如果设定为True并且parse_dates 可⽤,那么pandas将尝试转换为⽇期类型,如果可以转换,转换⽅法并解析。在某些情况下会快5~10倍。
keep_date_col : boolean, default False
keep_date_col : boolean, default False
如果连接多列解析⽇期,则保持参与连接的列。默认为False。
date_parser : function, default None
⽤于解析⽇期的函数,默认使⽤dateutil.parser.parser来做转换。Pandas尝试使⽤三种不同的⽅式解析,如果遇到问题则使⽤下⼀种⽅式。
1.使⽤⼀个或者多个arrays(由parse_dates指定)作为参数;
2.连接指定多列字符串作为⼀个列作为参数;
3.每⾏调⽤⼀次date_parser函数来解析⼀个或者多个字符串(由parse_dates指定)作为参数。
dayfirst : boolean, default False
DD/MM格式的⽇期类型
iterator : boolean, default False
返回⼀个TextFileReader 对象,以便逐块处理⽂件。
chunksize :int, default None
⽂件块的⼤⼩,  See IO Tools docs for more informationon iterator and chunksize.
compression :{‘infer’, ‘gzip’, ‘bz2’, ‘zip’, ‘xz’,None}, default ‘infer’
直接使⽤磁盘上的压缩⽂件。如果使⽤infer参数,则使⽤ gzip, bz2,zip或者解压⽂件名中以‘.gz’, ‘.bz2’, ‘.zip’,or ‘xz’这些为后缀的⽂件,否则不解压。如果使⽤zip,那么ZIP包中国必须只包含⼀个⽂件。设置为None则不解压。
新版本0.18.1版本⽀持zip和xz解压
thousands :str, default None
千分位分割符,如“,”或者“."
decimal :str, default ‘.’
字符中的⼩数点(例如:欧洲数据使⽤’,‘).
float_precision : string, default None
Specifies which converter the C engine should use for floating-point values. The options are None for the ordinary converter, high for the high-precision converter,and round_trip for the round-trip converter.
指定
lineterminator :str(length 1), default None
⾏分割符,只在C解析器下使⽤。
quotechar :str(length 1), optional
引号,⽤作标识开始和解释的字符,引号内的分割符将被忽略。
quoting :int or csv.QUOTE_* instance, default 0
控制csv中的引号常量。可选 QUOTE_MINIMAL (0), QUOTE_ALL (1), QUOTE_NONNUMERIC (2)or QUOTE_NONE (3)
doublequote : boolean, default True
双引号,当单引号已经被定义,并且quoting 参数不是QUOTE_NONE的时候,使⽤双引号表⽰引号内的元素作为⼀个元素使⽤。
escapechar :str(length 1), default None
当quoting 为QUOTE_NONE时,指定⼀个字符使的不受分隔符限值。
comment :str, default None
标识着多余的⾏不被解析。如果该字符出现在⾏⾸,这⼀⾏将被全部忽略。这个参数只能是⼀个字符,空⾏(就像skip_blank_lines=True)注释⾏被header和skiprows忽略⼀样。例如如果指定comment ='#'解析‘#empty\na,b,c\n1,2,3’ 以header=0 那么返回结果将是以’a,b,c'作为header。
encoding :str, default None
指定字符集类型,通常指定为'utf-8'.  List of Python standard encodings
dialect :str or csv.Dialect instance, default None
如果没有指定特定的语⾔,如果sep⼤于⼀个字符则忽略。具体查看csv.Dialect ⽂档
tupleize_cols : boolean, default False
Leave a list of tuples on columns as is(default is to convert to a Multi Index on the columns)
error_bad_lines : boolean, default True
如果⼀⾏包含太多的列,那么默认不会返回DataFrame ,如果设置成false,那么会将改⾏剔除(只能
在C解析器下使⽤)。
warn_bad_lines : boolean, default True
如果error_bad_lines =False,并且warn_bad_lines =True那么所有的“bad lines”将会被输出(只能在C解析器下使⽤)。
low_memory : boolean, default True
分块加载到内存,再低内存消耗中解析。但是可能出现类型混淆。确保类型不被混淆需要设置为False。或者使⽤dtype 参数指定类型。注意使⽤chunksize 或者iterator 参数分块读⼊会将整个⽂件读⼊到⼀个Dataframe,⽽忽略类型(只能在C解析器中有效)
buffer_lines :int, default None
不推荐使⽤,这个参数将会在未来版本移除,因为他的值在解析器中不推荐使⽤
compact_ints : boolean, default False
不推荐使⽤,这个参数将会在未来版本移除
如果设置compact_ints=True,那么任何有整数类型构成的列将被按照最⼩的整数类型存储,是否有符号将取决于use_unsigned 参数
use_unsigned : boolean, default False
不推荐使⽤:这个参数将会在未来版本移除
如果整数列被压缩(i.e. compact_ints=True),指定被压缩的列是有符号还是⽆符号的。
memory_map : boolean, default False
如果使⽤的⽂件在内存内,那么直接map⽂件使⽤。使⽤这种⽅式可以避免⽂件再次进⾏IO操作。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。