pandas-对dataframe的操作,对行列的增加删除修改等操作

  Pandas读取CSV文件主要用到的函数为:pandas.read_csv()


 
 
  1. 函数原型:
  2. pandas.read_csv(filepath_or_buffer, sep= ', ', delimiter= None, header= 'infer',
  3. names= None, index_col= None, usecols= None, squeeze= False,
  4. prefix= None, mangle_dupe_cols= True, dtype= None, engine= None,
  5. converters= None, true_values= None, false_values= None,
  6. skipinitialspace= False, skiprows= None, nrows= None,
  7. na_values= None, keep_default_na= True, na_filter= True,
  8. verbose= False, skip_blank_lines= True, parse_dates= False,
  9. infer_datetime_format= False, keep_date_col= False, date_parser= None,
  10. dayfirst= False, iterator= False, chunksize= None, compression= 'infer',
  11. thousands= None, decimal= b'.', lineterminator= None, quotechar= '"',
  12. quoting= 0, escapechar= None, comment= None, encoding= None,
  13. dialect= None, tupleize_cols= None, error_bad_lines= True,
  14. warn_bad_lines= True, skipfooter= 0, doublequote= True,
  15. delim_whitespace= False, low_memory= True, memory_map= False,
  16. float_precision= None)
  17. 常用参数:
  18. filepath_or_buffer : 类型str,代表CSV文件地址。
  19. sep : 类型str, 默认值为‘,’,用于指定分隔符。如果不指定参数,则会尝试使用逗号分隔。
  20. header : 类型为int或者int的列表,它指定用来作为列名行号,然后数据从行号的下一行开始读取。 默认情况下header是根据参数names(如下)
  21. 来推断header的值。如果names为 None,则等价于header= 0,默认把文件中第一行作为列名,数据从第一行开始读取。如果names显示地传入,
  22. 则等价于header= None,则数据从 0行开始读取。如果传入header= 0,names不为 None,则将替换原有的列名。header参数可以是一个list。
  23. 例如:[ 0, 1, 3],这个list表示将文件中的这些行作为列标题(意味着每一列有多个标题),介于中间的行将被忽略掉(例如本例中的 2
  24. 本例中的数据 1, 2, 4行将被作为多级标题出现,第 3行数据将被丢弃,dataframe的数据从第 5行开始。)。
  25. names : 一个数组, 默认为 None。列名列表,如果数据文件中没有列标题行,就需要执行header= None
  26. usecols : 一个数组, 默认为 None,返回数据列一个子集。如果传入字符,则列名需要与表中列名对应。如果传入整数列表,则表示列的索引值。
  27. 例如:usecols有效参数可能是 [ 0, 1, 2]或者是 [‘foo’, ‘bar’, ‘baz’]。
  28. prefix : 类型str, 默认为 None。在没有列标题时,给列添加前缀。例如:添加‘X’ 成为 X0, X1, ...
  29. engine : {‘c’, ‘python’},可选。使用的分析引擎。可以选择C或者是python。C引擎快但是Python引擎功能更加完备。
  30. nrows : 类型int, 默认为 None。需要读取的行数(从文件头开始算起)。
  31. iterator : 类型boolean, 默认为 False。返回一个TextFileReader 对象,以便逐块处理文件。

  如果CSV文件过大,则可以分块读取CSV文件,比如:


 
 
  1. import pandas as pd
  2. reader = pd.read_csv( './train.csv', iterator= True)
  3. try:
  4. df = reader.get_chunk( 70000) # 读取70000行数据
  5. except StopIteration:
  6. print ( "Iteration is stopped.")
  7. print (df.info())

 2、DataFrame保存到CSV

  将DataFrame保存到CSV文件的函数为:DataFrame.to_csv()


 
 
  1. 函数原型:
  2. DataFrame.to_csv(path_or_buf= None, sep= ', ', na_rep= '', float_format= None, columns= None,
  3. header= True, index= True, index_label= None, mode= 'w', encoding= None,
  4. compression= None, quoting= None, quotechar= '"', line_terminator= '\n',
  5. chunksize= None, tupleize_cols= None, date_format= None, doublequote= True,
  6. escapechar= None, decimal= '.')
  7. 常用参数:
  8. path_or_buf : 文件路径,如果没有指定则将会直接返回字符串的 json
  9. sep : 输出文件的字段分隔符,默认为 “,”
  10. na_rep : 用于替换空数据的字符串,默认为 ''
  11. float_format : 设置浮点数的格式(几位小数点)
  12. columns : 要写的列
  13. header : 是否保存列名,默认为 True ,保存
  14. index : 是否保存索引,默认为 True ,保存

3、增加DataFrame数据

(1)增加一列数据


 
 
  1. print df2
  2.    col1  col2  col3
  3. a      1      2      3
  4. b      4      5      6
  5. df2[ 'col4'] = [ 'cnn', 'rnn'# 对DataFrame对象进行列扩充
  6. print df2
  7.     col1  col2  col3 col4
  8. a      1      2      3  cnn
  9. b      4      5      6  rnn
  10. df2[ 'col5'] = pd.DataFrame([ 'MachineLearning', 'DeepLearning'], index=[ 'a', 'b'])
  11. print df2    # 也可以通过一个新的DataFrame对象来定义一个新列,索引自动对应
  12.      col1  col2  col3 col4       col5
  13. a      1      2      3  cnn  MachineLearning
  14. b      4      5      6  rnn    DeepLearning
  15. df2[ 'col4'] = 1
  16. print df2
  17. col1 col2 col3 col4
  18. a 1 2 3 1
  19. b 4 5 6 1

(2)增加一行数据 


 
 
  1. df
  2. col1 col2 col3
  3. 0 1 2 3
  4. 1 4 5 6
  5. new_line = [ 7, 8, 9]
  6. df.loc[ 3]= new_line
  7. print (df)
  8. col1 col2 col3
  9. 0 1 2 3
  10. 1 4 5 6
  11. 3 7 8 9

 但是十分注意的是,这样实际是改的操作,如果 df.loc [index] 中的index已经存在,则新的值会覆盖之前的值。可以使用DataFrame.append()方法添加。例如:


 
 
  1. df1 = pd.DataFrame([[ 1, 2, 3],[ 4, 5, 6]],columns=[ 'col1', 'col2', 'col3'])
  2. df2 = pd.DataFrame([[ 7, 8, 9],[ 10, 11, 12]],columns=[ 'col1', 'col2', 'col3'])
  3. print (df1)
  4. print (df2)
  5. col1 col2 col3
  6. 0 1 2 3
  7. 1 4 5 6
  8. col1 col2 col3
  9. 0 7 8 9
  10. 1 10 11 12
  11. df3 = df1. append(df2, ignore_index=True)
  12. df4 = df1. append(df2)
  13. print (df3)
  14. print (df4)
  15. col1 col2 col3
  16. 0 1 2 3
  17. 1 4 5 6
  18. 2 7 8 9
  19. 3 10 11 12
  20. col1 col2 col3
  21. 0 1 2 3
  22. 1 4 5 6
  23. 0 7 8 9
  24. 1 10 11 12

4、删除DataFrame数据

(1)删除一列数据del 、DataFrame.drop()


 
 
  1. del df[ 'a'#删除dataframe中指定的列,这个是直接影响当前的dataframe,注意 del不是函数,是python中的内置语句,没有返回值.
  2. df.drop([ 'a'],axis= 1#删除指定的列,与上面的区别是不会影响原来的dataframe,drop方法会返回一个删除了指定列的新的dataframe.
  3. # 这里如果不加axis=1,则默认是删除行,比如
  4. df
  5. col1 col2 col3
  6. a 1 2 3
  7. b 4 5 6
  8. c 7 8 9
  9. df.drop([ 'a'], inplace= True)
  10. print (df)
  11. col1 col2 col3
  12. b 4 5 6
  13. c 7 8 9

(2)删除一行数据 DataFrame.drop()


 
 
  1. df = pd.DataFrame([[ 1, 2, 3],[ 4, 5, 6],[ 7, 8, 9]],columns=[ 'col1', 'col2', 'col3'])
  2. # 如果不设置参数inplace=True,则只能在生成的新数据块中实现删除效果,而不能删除原有数据块的相应行。
  3. df2 = df.drop([ 0, 1])
  4. print (df)
  5. print (df2)
  6. col1 col2 col3
  7. 0 1 2 3
  8. 1 4 5 6
  9. 2 7 8 9
  10. col1 col2 col3
  11. 2 7 8 9
  12. # 如果inplace=True则原有数据块的相应行被删除
  13. df.drop([ 0, 1], inplace= True)
  14. print (df)
  15. col1 col2 col3
  16. 2 7 8 9

5、查询DataFrame数据

(1)根据列名和行索引获取指定列和行


 
 
  1. df.head(n)     # 获取df中的前n行数据,n不指定,则默认为5
  2. df.tail(n)      # 获取df中的后n行数据,n不指定,则默认为5
  3. # head 和 tail 返回的是一个新的dataframe,与原来的无关
  4. df[ 'a']    # 按照列名获取指定的列,返回的是一个Series
  5. df[: 2]    # 获取前2行数据,效果等同df[0:2],返回的是一个新的dataframe
  6. df[ 2: 5# 获取第3行~5行 这3条记录,返回的是一个新的dataframe
  7. df.loc[ '20'# 获取指定索引的行,返回的是一个Series,loc[]传入的是索引名
  8. df.iloc[ 3]    # 获取指定序号的行,这里是第4行,iloc[]传入的是行数
  9. df
  10. col1 col2 col3
  11. a 1 2 3
  12. b 4 5 6
  13. c 7 8 9
  14. # 获取指定行
  15. print (df.loc[ 'a'])
  16. print (df.iloc[ 0])
  17. col1 1
  18. col2 2
  19. col3 3
  20. Name: a, dtype: int64
  21. col1 1
  22. col2 2
  23. col3 3
  24. Name: a, dtype: int64
  25. # 获取指定列
  26. print (df[ 'col1'])
  27. a 1
  28. b 4
  29. c 7
  30. Name: col1, dtype: int64
  31. # 获取单个元素
  32. print (df.iloc[ 0, 1])
  33. 2

(2)条件查询 


 
 
  1. df
  2. col1 col2 col3
  3. a 1 2 3
  4. b 4 5 6
  5. c 7 8 9
  6. df2 = df.loc[(df[ 'col1']> 2)&(df[ 'col2']< 7)]
  7. print (df2)
  8. col1 col2 col3
  9. b 4 5 6
  10. df3 = df[(df[ 'col1']> 1) & (df.col2< 8)]
  11. print (df3)
  12. col1 col2 col3
  13. b 4 5 6

6、修改DataFrame数据

(1)遍历数据


 
 
  1. df
  2. col1 col2 col3
  3. a 1 2 3
  4. b 4 5 6
  5. c 7 8 9
  6. for index,row in df.iterrows():
  7. print (index,row[ 0],row[ 1],row[ 2])
  8. a 1 2 3
  9. b 4 5 6
  10. c 7 8 9
  11. # 或者
  12. for co1,col2,col3 in df.values:
  13. print (co1,col2,col3)
  14. 1 2 3
  15. 4 5 6
  16. 7 8 9
  17. # 或者
  18. shape = df.shape
  19. for i in range(shape[ 0]):
  20. for j in range(shape[ 1]):
  21. df.iloc[i,j] = 'hehe'
  22. print (df)
  23. col1 col2 col3
  24. a hehe hehe hehe
  25. b hehe hehe hehe
  26. c hehe hehe hehe

(2)修改行和修改列 


 
 
  1. df[ 'column'] = [] # column在DataFrame中存在,则修改,否则添加新列
  2. df.iloc[ index]、df.loc[index_name] = [] # index在DataFrame中存在则修改,不存在则添加

(3)替换值DataFrame.replace()

  函数原型:


 
 
  1. DataFrame.replace(to_replace= None, value= None, inplace= False, limit= None, regex= False, method= 'pad', axis= None)
  2.   # to_replace: DataFrame中被替换的元素名
  3.   # value:用于替换DataFrame中和to_replace匹配的值
  4.   # inplace:如果为true,那么将修改该对象不产生副本

  实例:  


 
 
  1. df
  2. col2 col1 col3
  3. b 4 6 5
  4. a 1 3 2
  5. c 7 9 8
  6. df.replace( 9, 'hiudown',inplace= True)
  7. print (df)
  8. col2 col1 col3
  9. b 4 6 5
  10. a 1 3 2
  11. c 7 hiudown 8

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值