【3.1.1.1】Pandas--CSV的读写

二、读取文件

2.1 read_csv

最近处理数据时发现当pd.read_csv()数据时有时候会有读取到未命名的列,且该列也用不到,一般是索引列被换掉后导致的,有强迫症的看着难受,这时候dataframe.drop([columns,])是没法处理的,怎么办呢, 最笨的方法是直接给列索引重命名:

data6

        Unnamed: 0  high    symbol  time
date                
2016-11-01  0   3317.4  IF1611  18:10:44.8
2016-11-01  1   3317.4  IF1611  06:01:04.5
2016-11-01  2   3317.4  IF1611  07:46:25.5
2016-11-01  3   3318.4  IF1611  09:30:04.0
2016-11-01  4   3321.8  IF1611  09:31:04.0

data6.columns = list(‘abcd’)

data6

    a   b   c   d
date                
2016-11-01  0   3317.4  IF1611  18:10:44.8
2016-11-01  1   3317.4  IF1611  06:01:04.5
2016-11-01  2   3317.4  IF1611  07:46:25.5
2016-11-01  3   3318.4  IF1611  09:30:04.0
2016-11-01  4   3321.8  IF1611  09:31:04.0

读取tsv

bb = pd.read_csv("ig_bases_mutated_nucl_freq.tsv",sep='\t',index_col=False,header=None,skip_blank_lines=True)
  • index_col=False # 不用第一列作为index
  • header=None # 不用第一行作为header ;如果header=None,则默认的columns.names为[0,1,2,3..],数字哦
  • skiprows=[0,1,2] 不读取第一、二、三行数据
  • skipfooter = 3 最后3行不读

常用例子:

df = pd.read_csv(one_file_fp, skiprows=[0, 1, 2, 3, 4, 5], index_col=False, sep=',').dropna(subset=['Peptide'])

2.2 read_table

2.2.1 用空格或tab来切分数据

df = pd.read_table(‘paps_abangle_angles_results.tsv’,sep=” |\t”, engine=‘python’)

需要engine指定Python哦

2.2.2 12E8自动被识别为科学计数

dtype : Type name or dict of column -> type, default None

Data type for data or columns. E.g. {‘a’: np.float64, ‘b’: np.int32} Use str or object together with suitable na_values settings to preserve and not interpret dtype. If converters are specified, they will be applied INSTEAD of dtype conversion.

df = pd.read_table(‘paps_abangle_angles_results.tsv’,dtype={“column_name”:“str”})

指定“column_name”那一列数据为str的数据类型

三、写文件

df_total.to_csv(result_fp,header=None,index =False)

四、报错

报错1

ParserError: Error tokenizing data. C error: Expected 1 fields in line 122, saw 2

解决办法:

df = pd.read_table('input/Adimab_IRA_out.txt',header=None,index_col=False,sep='\t',engine='python')[[0,1]]

只要第一、第二列数据

报错2 CSV error: line contains NULL byte

原因:通常是因为保存时扩展名为xls或xlsx,而将其改为csv文件通常是重命名

解决方法1:

把它另存为.csv文件即可

解决方法2:

fi = open('my.csv', 'rb')
data = fi.read()
fi.close()
fo = open('mynew.csv', 'wb')
fo.write(data.replace('\x00', ''))
fo.close()

参考资料

个人公众号,比较懒,很少更新,可以在上面提问题,如果回复不及时,可发邮件给我: tiehan@sina.cn

Sam avatar
About Sam
专注生物信息 专注转化医学