Python:数据写入读取和处理

简介: 文章目录前言数据的写入读取1.CSV数据写入2.CSV数据的读取3.Excel数据的读取数据的处理1.删除数据2.空值的处理3.重复数据的处理

前言

对于数据的处理很杂,所以在这里整理了一下

数据的写入读取

在做数据分析的时候,Excel是我们最常用的工具,但是当数据量比较大的时,Excel光把数据文件打开就要很久很久,那么利用Pandas就会非常高效。

我们先来看看CSV的写入

1.CSV数据写入

csv是最为常见的以纯文本文件存储数据文件的格式,它的优点是通用性很强,不受操作系统以及具体的软件的限制。我们以写入csv为例,看一下pandas是如何是将数据写入csv文件中。

from pandas import Series,DataFrame
# 使用字典创建
index_list = ['001','002','003','004','005','006','007','008']
name_list = ['李白','王昭君','诸葛亮','狄仁杰','孙尚香','妲己','周瑜','张飞']
age_list = [25,28,27,25,30,29,25,32]
salary_list = ['10k','12.5k','20k','14k','12k','17k','18k','21k']
marital_list = ['NO','NO','YES','YES','NO','NO','NO','YES']
dic={
    '姓名': Series(data=name_list,index=index_list),
    '年龄': Series(data=age_list,index=index_list),
    '薪资': Series(data=salary_list,index=index_list),
    '婚姻状况': Series(data=marital_list,index=index_list)
    }
df=DataFrame(dic) 
print(df)
# 写入csv,path_or_buf为写入文本文件
df.to_csv(path_or_buf='./People_Information.csv', encoding='utf_8_sig')
# index = False,就可以不储存DataFrame的行索引信息
print('end')

✨运行效果

      姓名  年龄     薪资 婚姻状况
001   李白  25    10k   NO
002  王昭君  28  12.5k   NO
003  诸葛亮  27    20k  YES
004  狄仁杰  25    14k  YES
005  孙尚香  30    12k   NO
006   妲己  29    17k   NO
007   周瑜  25    18k   NO
008   张飞  32    21k  YES
end

在上面的代码里,我们创建了一个DataFrame,接着通过to_csv()方法将DataFrame保存为csv文件。

从结果中可以发现,to_csv()保存数据时,df的行索引作为一列被输出到csv文件中。

如何在保存csv文件的时候,不存储DataFrame的行索引信息呢,我们看下面的解决方法。

df.to_csv(path_or_buf='路径',index=False,encoding='utf_8_sig')

在to_csv方法中将参数index设置为False就可以不存储DataFrame的行索引信息。

还有如何避免乱码呢,在encoding参数设置“utf_8_sig”后乱码就会消失。

2.CSV数据的读取

数据的存储我们发现很简单,调用to_csv()后设置文件存储路径后就可以了。将自己保存的文件路径放进去就行了

import pandas as pd
df = pd.read_csv('D:\jupy\People_Information.csv',header=0)
# read_csv()默认会将文件中的第一行作为数据的列索引。
# 可以将header设置为None,列索引值会使用默认的1、2、3、4
print(df)
print(df.shape)
   Unnamed: 0   姓名  年龄     薪资 婚姻状况
0           1   李白  25    10k   NO
1           2  王昭君  28  12.5k   NO
2           3  诸葛亮  27    20k  YES
3           4  狄仁杰  25    14k  YES
4           5  孙尚香  30    12k   NO
5           6   妲己  29    17k   NO
6           7   周瑜  25    18k   NO
7           8   张飞  32    21k  YES
8           9  王昭君  28    22k   NO
9          10   大乔  26  21.5k  YES
(10, 5)

从图中可以看出来,还可以看出,read_csv()默认会将文件中的第一行作为数据的列索引。

如果第一行不是我们要的索引值,那咋办哪呢?当然这个问题,是有解决方法的,read_csv()的header参数默认是0,取第一行的值,可以根据具体的要求设置header的值来确定列索引。

import pandas as pd
people = pd.read_csv('路径',header = 1)
print(people.head())

3.Excel数据的读取

Excel文件的读取和csv的读取方式相似,read_csv()读取csv文件,read_excel()读取Excel文件。

import pandas as pd
sheet = pd.read_excel('路径.xlsx')
print(sheet.head())

但是还是有差别的,一个Excel文件可以创建多个表,然后在不同的表中存储不同数据,这种形式的文件很常见。但是要注意csv文件不存在多个sheet的问题。

import pandas as pd
sheet1 = pd.read_excel('路径.xlsx',sheet_name='sheet1')
print(sheet1.head())
sheet2 = pd.read_excel('路径.xlsx',sheet_name='sheet2')
print(sheet2.head())
# to_csv()会比to_excel()少一个sheet_name的参数

在上面的代码里,我们引入了带有两个表的sheet.xlsx的Excel文件,两个表名分别为’sheet1’,‘sheet2’,然后我们通过指定sheet_name的值,获取不同表中的数据。

数据的处理

在我们有能力去保存数据后,在日常工作中,肯定会有不需要的数据,也就是需要进行特殊处理的数据,这时候我们就需要具备进行数据处理的能力了

1.删除数据

在NumPy模块中提供了nan的值,如果你想要创建一个空值,可以使用下方代码:

from numpy import nan as NaN

而且需要注意的是,NaN比较特殊点就是其本身是一种float类型数据。

✨运行效果

当数据中出现了我们需要删除的数据时,比如:NaN,那NaN表示的是什么数据呢?

如果文件的单元格中没有值时,在使用pandas读取后就会用NaN表示,也就是我们常说的空值。

对于大批量的Series数据,使用肉眼很难判断空值的存在,这时我们可以先对空值进行过滤。

from numpy import nan as NaN
import pandas as pd
se=pd.Series([4,NaN,8,NaN,5])
print(se.notnull())
print(se[se.notnull()])
print(se)

✨运行效果

通过结果我们发现,结果中依然存在空值,并没有过滤掉空值。

所以在DataFrame类型数据中,一般我们会将存在NaN的数据使用dropna()方法全部删掉:

df1 = df.dropna()
from numpy import nan as NaN
import pandas as pd
df_dict = {
  'name':['ZhangSan','LiSi','WangWu','ZhaoLiu'],
  'age':['18','20',NaN,'22'],
  'weight':['50',NaN,'60','80']
}
df = pd.DataFrame(data=df_dict,index=['001','002','003','004'])
print(df)
df1 = df.dropna()
print(df1)

dropna()是删除空值数据的方法,默认将只要含有NaN的整行数据删掉,如果想要删除整行都是空值的数据需要添加how='all’参数。

✨运行效果

如果想要对列做删除操作,需要添加axis参数,axis=1表示列,axis=0表示行。

我们也可以使用thresh参数筛选想要删除的数据,thresh=n保留至少有n个非NaN数据的行。大家可以自信心尝试

DataFrame.drop(labels=None,axis=0, index=None, columns=None, inplace=False)

代码解释:

axis=0列,=1为行 labels :就是要删除的行列的名字,用列表给定。 index: 直接指定要删除的行。

columns: 直接指定要删除的列。

inplace=False:默认该删除操作不改变原数据,而是返回一个执行删除操作后的新dataframe。

inplace=True:则会直接在原数据上进行删除操作,删除后无法返回。

所以,根据参数我们可以总结出,删除行列有两种方式:

1.labels=None,axis=0 的组合
2.index或columns直接指定要删除的行或列

2.空值的处理

对于空值我们可以将整条数据删除,也可以使用fillna()方法对空值进行填充。

df.fillna(value=None, method=None, axis=None, inplace=False, limit=None, downcast=None, **kwargs)

注意:method参数不能与value参数同时出现。

import pandas as pd
df = pd.read_excel('date.xlsx')# 用常数填充fillna# 
print(df.fillna(0))# 用一列的平均值填充# 
print(df.fillna(df.mean())# 用前面的值来填ffillna
print(df.fillna(method='ffill', axis=0))

3.重复数据的处理

重复数据的存在有时不仅会降低分析的准确度,也会降低分析的效率。所以我们在整理数据的时候应该将重复的数据删除掉。

利用duplicated()函数可以返回每一行判断是否重复的结果(重复则为True)。

import pandas as pd
df_dict = {
  'name':['ZhangSan','LiSi','WangWu','ZhaoLiu'],
  'age':['18','20','19','22'],
  'weight':['50','55','60','80']
}
print(df)
df = pd.DataFrame(data=df_dict,index=['001','002','003','004'])
print(df.duplicated())

✨运行效果

通过结果我们发现,返回的是一个值为Bool类型的Series,如果当前行所有列的数据与前面的数据是重复的就返回True;反之,则返回False。

删除的话,可以使用drop_duplicates()函数将重复的数据行进行删除

df.drop_duplicates()

我们也可以只可以通过判断某一列的重复数据,然后进行删除

df.drop_duplicates(['Name'],inplace=False)

其中[‘Name’]表示对比Name例数据是否有重复,inplace用来控制是否直接对原始数据进行修改。

import pandas as pd
df_dict = {
  'name':['ZhangSan','LiSi','LiSi','ZhaoLiu'],
  'age':['18','20','19','22'],
  'weight':['50','55','60','80']
}
print(df)
df = pd.DataFrame(data=df_dict,index=['001','002','003','004'])
df1=df.drop_duplicates(['name'],inplace=False)
print(df1)

✨运行效果

相关文章
|
2月前
|
数据采集 数据可视化 数据挖掘
利用Python自动化处理Excel数据:从基础到进阶####
本文旨在为读者提供一个全面的指南,通过Python编程语言实现Excel数据的自动化处理。无论你是初学者还是有经验的开发者,本文都将帮助你掌握Pandas和openpyxl这两个强大的库,从而提升数据处理的效率和准确性。我们将从环境设置开始,逐步深入到数据读取、清洗、分析和可视化等各个环节,最终实现一个实际的自动化项目案例。 ####
305 10
|
6天前
|
数据采集 数据安全/隐私保护 Python
从零开始:用Python爬取网站的汽车品牌和价格数据
在现代化办公室中,工程师小李和产品经理小张讨论如何获取懂车帝网站的汽车品牌和价格数据。小李提出使用Python编写爬虫,并通过亿牛云爬虫代理避免被封禁。代码实现包括设置代理、请求头、解析网页内容、多线程爬取等步骤,确保高效且稳定地抓取数据。小张表示理解并准备按照指导操作。
从零开始:用Python爬取网站的汽车品牌和价格数据
|
1天前
|
算法 Serverless 数据处理
从集思录可转债数据探秘:Python与C++实现的移动平均算法应用
本文探讨了如何利用移动平均算法分析集思录提供的可转债数据,帮助投资者把握价格趋势。通过Python和C++两种编程语言实现简单移动平均(SMA),展示了数据处理的具体方法。Python代码借助`pandas`库轻松计算5日SMA,而C++代码则通过高效的数据处理展示了SMA的计算过程。集思录平台提供了详尽且及时的可转债数据,助力投资者结合算法与社区讨论,做出更明智的投资决策。掌握这些工具和技术,有助于在复杂多变的金融市场中挖掘更多价值。
22 12
|
1月前
|
数据采集 Web App开发 数据可视化
Python用代理IP获取抖音电商达人主播数据
在当今数字化时代,电商直播成为重要的销售模式,抖音电商汇聚了众多达人主播。了解这些主播的数据对于品牌和商家至关重要。然而,直接从平台获取数据并非易事。本文介绍如何使用Python和代理IP高效抓取抖音电商达人主播的关键数据,包括主播昵称、ID、直播间链接、观看人数、点赞数和商品列表等。通过环境准备、代码实战及数据处理与可视化,最终实现定时任务自动化抓取,为企业决策提供有力支持。
|
2月前
|
数据采集 Web App开发 监控
Python爬虫:爱奇艺榜单数据的实时监控
Python爬虫:爱奇艺榜单数据的实时监控
|
2月前
|
数据采集 分布式计算 大数据
构建高效的数据管道:使用Python进行ETL任务
在数据驱动的世界中,高效地处理和移动数据是至关重要的。本文将引导你通过一个实际的Python ETL(提取、转换、加载)项目,从概念到实现。我们将探索如何设计一个灵活且可扩展的数据管道,确保数据的准确性和完整性。无论你是数据工程师、分析师还是任何对数据处理感兴趣的人,这篇文章都将成为你工具箱中的宝贵资源。
|
2月前
|
数据采集 存储 XML
python实战——使用代理IP批量获取手机类电商数据
本文介绍了如何使用代理IP批量获取华为荣耀Magic7 Pro手机在电商网站的商品数据,包括名称、价格、销量和用户评价等。通过Python实现自动化采集,并存储到本地文件中。使用青果网络的代理IP服务,可以提高数据采集的安全性和效率,确保数据的多样性和准确性。文中详细描述了准备工作、API鉴权、代理授权及获取接口的过程,并提供了代码示例,帮助读者快速上手。手机数据来源为京东(item.jd.com),代理IP资源来自青果网络(qg.net)。
|
3月前
|
传感器 物联网 开发者
使用Python读取串行设备的温度数据
本文介绍了如何使用Python通过串行接口(如UART、RS-232或RS-485)读取温度传感器的数据。详细步骤包括硬件连接、安装`pyserial`库、配置串行端口、发送请求及解析响应等。适合嵌入式系统和物联网应用开发者参考。
92 3
|
4月前
|
数据采集 JSON 数据处理
抓取和分析JSON数据:使用Python构建数据处理管道
在大数据时代,电商网站如亚马逊、京东等成为数据采集的重要来源。本文介绍如何使用Python结合代理IP、多线程等技术,高效、隐秘地抓取并处理电商网站的JSON数据。通过爬虫代理服务,模拟真实用户行为,提升抓取效率和稳定性。示例代码展示了如何抓取亚马逊商品信息并进行解析。
抓取和分析JSON数据:使用Python构建数据处理管道
|
4月前
|
数据处理 Python
Python实用记录(十):获取excel数据并通过列表的形式保存为txt文档、xlsx文档、csv文档
这篇文章介绍了如何使用Python读取Excel文件中的数据,处理后将其保存为txt、xlsx和csv格式的文件。
268 3
Python实用记录(十):获取excel数据并通过列表的形式保存为txt文档、xlsx文档、csv文档

热门文章

最新文章

推荐镜像

更多