【pandas基础】--数据读取
数据读取是第一步,只有成功加载数据之后,后续的操作才有可能。pandas可以读取和导入各种数据格式的数据,如CSV,Excel,JSON,SQL,HTML等,不需要手动编写复杂的读取代码。
1. 各类数据源
pandas提供了导入各类常用文件格式数据的接口,这里介绍3种最常用的加载数据的接口。
1.1 从 CSV 文件读取数据
读取csv文件的接口:read_csv()
import pandas as pd
# 此csv中包含一些中国人口的统计信息
df = pd.read_csv("/path/to/china-population.csv")
df.head() # 显示前5条数据https://cdn.nlark.com/yuque/0/2023/png/2235414/1680145624534-d877e532-8744-4d40-9a69-7c311bc2f363.png#averageHue=%23dee0e6&clientId=uf170f3b5-2e5f-4&from=paste&height=182&id=uba27ec58&originHeight=182&originWidth=474&originalType=binary&ratio=1&rotation=0&showTitle=false&size=19252&status=done&style=stroke&taskId=u3d6094c0-c253-4a5f-80c8-9adc42e9d48&title=&width=474
1.2 从 excel 文件读取数据
读取excel文件的接口:read_excel ()
读取excel文件时,默认读取第一个sheet中的数据。
import pandas as pd
# 此excel中的数据与上面csv文件中的一样
df = pd.read_excel("/path/to/china-population.xlsx")
df.head() # 显示前5条数据https://cdn.nlark.com/yuque/0/2023/png/2235414/1680145624534-d877e532-8744-4d40-9a69-7c311bc2f363.png#averageHue=%23dee0e6&clientId=uf170f3b5-2e5f-4&from=paste&height=182&id=aNwTo&originHeight=182&originWidth=474&originalType=binary&ratio=1&rotation=0&showTitle=false&size=19252&status=done&style=stroke&taskId=u3d6094c0-c253-4a5f-80c8-9adc42e9d48&title=&width=474
1.3 从网络中读取数据
除了从本地文件中读取数据之外,read_csv和 read_excel也可以直接从URL读取数据。
比如,上面的csv文件和excel文件可以从下面的地址下载。
http://databook.top:8888/pandas/china-population.csv
http://databook.top:8888/pandas/china-population.xlsx
可以直接将URL传给 read_csv和 read_excel,不用下载保存本地。
import pandas as pd
df = pd.read_csv("http://databook.top:8888/pandas/china-population.csv")
df_excel = pd.read_excel("http://databook.top:8888/pandas/china-population.xlsx")2. 不同分隔符
csv 文件中默认用逗号,分隔不同的字段,不过,也有很多csv文件不用逗号分隔,用其他生僻的符号来分隔。
import pandas as pd
df = pd.read_csv("http://databook.top:8888/pandas/china-population-sep.csv")
df.head()https://cdn.nlark.com/yuque/0/2023/png/2235414/1680147842877-04f74349-9bb3-48ba-9aa6-86403c4ba407.png#averageHue=%23dbdde3&clientId=uf170f3b5-2e5f-4&from=paste&height=183&id=u5c451d9b&originHeight=183&originWidth=393&originalType=binary&ratio=1&rotation=0&showTitle=false&size=19306&status=done&style=stroke&taskId=uc0ebf657-49c5-4687-a96d-bb5d27df726&title=&width=393
文件china-population-sep.csv用 |来分隔不同的字段,直接读取的话,变成只有一个字段。
这时,要明确设置分隔符。
import pandas as pd
df = pd.read_csv("http://databook.top:8888/pandas/china-population-sep.csv", sep="|")
df.head()https://cdn.nlark.com/yuque/0/2023/png/2235414/1680148061867-636bf984-293c-43e6-a566-2d456c920326.png#averageHue=%23dee0e5&clientId=uf170f3b5-2e5f-4&from=paste&height=181&id=uaba4f0f0&originHeight=181&originWidth=440&originalType=binary&ratio=1&rotation=0&showTitle=false&size=18695&status=done&style=stroke&taskId=u1d8c26da-6c59-4bad-b1cf-94658e17b31&title=&width=440
这样就得到了正确的数据结构。
3. 设置列名称
除了可以设置分隔符之外,读取数据时,也可以设置列的名称。
上面的例子中,列的名称都是字母的缩写,读取文件时可以替换成中文名称。
import pandas as pd
df = pd.read_csv(
"http://databook.top:8888/pandas/china-population-sep.csv",
sep="|",
names=["年份数字", "年份", "指标编码", "指标名称", "人口数"],
)
df.head()https://cdn.nlark.com/yuque/0/2023/png/2235414/1680148282457-61ca98de-d96d-456c-84c4-df188d98b7ed.png#averageHue=%23dee0e6&clientId=uf170f3b5-2e5f-4&from=paste&height=185&id=u5675a74e&originHeight=185&originWidth=476&originalType=binary&ratio=1&rotation=0&showTitle=false&size=20301&status=done&style=stroke&taskId=ud3f4999e-5140-49fc-af18-424338c7e5b&title=&width=476
通过names参数设置列的名称,names参数是个列表,其中元素的个数一般与列的数目保持一致。
如果names中元素个数少于列的数目,那么多出来的列会作为索引(关于索引index,后续会详细介绍)。
import pandas as pd
df = pd.read_csv(
"http://databook.top:8888/pandas/china-population-sep.csv",
sep="|",
names=["指标编码", "指标名称", "人口数"],
)
df.head()https://cdn.nlark.com/yuque/0/2023/png/2235414/1680148924069-0b268747-64dc-4ae6-91c9-0e3f161b4caf.png#averageHue=%23dddfe5&clientId=uf170f3b5-2e5f-4&from=paste&height=181&id=u183ad771&originHeight=181&originWidth=418&originalType=binary&ratio=1&rotation=0&showTitle=false&size=18764&status=done&style=stroke&taskId=ucd105328-a281-4ecc-8bf2-d9591d3b081&title=&width=418
如果 names中元素个数多于列的数目,多出来的元素作为新增的空白列。
import pandas as pd
df = pd.read_csv(
"http://databook.top:8888/pandas/china-population-sep.csv",
sep="|",
names=["年份数字", "年份", "指标编码", "指标名称", "人口数", "列名称", "列名称2"],
)
df.head()https://cdn.nlark.com/yuque/0/2023/png/2235414/1680148889177-f0f5a495-7f62-46e0-9945-a5c28044f609.png#averageHue=%23dee0e5&clientId=uf170f3b5-2e5f-4&from=paste&height=179&id=u42e3e0c8&originHeight=179&originWidth=618&originalType=binary&ratio=1&rotation=0&showTitle=false&size=23418&status=done&style=stroke&taskId=u4f4c0788-4a79-47de-99d9-fd9656db6dc&title=&width=618
上面的例子中,我们应该发现了一个问题,设置 names作为新的列名称之后,原有的列名称被当成了实际的数据。
也就是:
https://cdn.nlark.com/yuque/0/2023/png/2235414/1680148960686-3be0eadb-a5f3-4df7-9ac1-918e59fc668c.png#averageHue=%23dee0e5&clientId=uf170f3b5-2e5f-4&from=paste&height=185&id=u6067bc9b&originHeight=185&originWidth=476&originalType=binary&ratio=1&rotation=0&showTitle=false&size=20526&status=done&style=stroke&taskId=u4be0fb81-147c-492e-a1b3-dd5cee78e45&title=&width=476
设置新的列名称时,如果数据中包含列名称的话,需要忽略掉这个名称。
设置 header=0,忽略作为标题的第一行。
如果文件本来就没有标题的话,设置 header=None。
import pandas as pd
df = pd.read_csv(
"http://databook.top:8888/pandas/china-population-sep.csv",
sep="|",
header=0,
names=["年份数字", "年份", "指标编码", "指标名称", "人口数"],
)
df.head()https://cdn.nlark.com/yuque/0/2023/png/2235414/1680149303357-1de51e4c-f431-4ff7-bd71-a09cdddc0bec.png#averageHue=%23dcdee4&clientId=uf170f3b5-2e5f-4&from=paste&height=176&id=u214af6e9&originHeight=176&originWidth=474&originalType=binary&ratio=1&rotation=0&showTitle=false&size=21297&status=done&style=stroke&taskId=u03b802b7-0c1f-4b75-9174-3e0e8da4cc8&title=&width=474
4. 随机生成数据
pandas支持从很多数据源读取数据,不过,有时候我们只想尝试尝试 pandas中的一些方法,并不想创建数据源。
这时,可以通过 numpy包创建一个随机的二维矩阵,直接将这个二维矩阵的数据导入 pandas即可。
下面的例子创建了一个10行3列的数据集。
import pandas as pd
import numpy as np
data = np.random.rand(10,3)
df = pd.DataFrame(data, columns=["data1", "data2", "data3"])
df.head()https://cdn.nlark.com/yuque/0/2023/png/2235414/1680150276570-5da71d5b-1d9f-4594-a6a2-d4bcb855febb.png#averageHue=%23dee0e6&clientId=uf170f3b5-2e5f-4&from=paste&height=184&id=ue24fa80a&originHeight=184&originWidth=272&originalType=binary&ratio=1&rotation=0&showTitle=false&size=13232&status=done&style=stroke&taskId=ufa2ad045-318d-4819-94d4-f502801795c&title=&width=272
通过临时创建的随机数据,可以尝试 pandas提供的各类接口。
5. 总结回顾
本篇了主要介绍了数据的读取方法,重点介绍的是 csv 文件的读取方式,因为这是最常用的数据源。
其他数据源的读取方式也大同小异,各种数据源的差异会体现在不同接口的参数上。
本文所用到的数据:
[*]http://databook.top:8888/pandas/china-population.csv
[*]http://databook.top:8888/pandas/china-population-sep.csv
[*]http://databook.top:8888/pandas/china-population.xlsx
本文关联的微信视频号短视频:
https://cdn.nlark.com/yuque/0/2023/png/2235414/1683190276250-3178bb83-2bf2-47f3-9410-5acd2141a43b.png#averageHue=%23ebebeb&clientId=ueff1bbe6-bb05-4&from=ui&id=u665665a0&originHeight=377&originWidth=320&originalType=binary&ratio=1&rotation=0&showTitle=false&size=13994&status=done&style=stroke&taskId=u37d0b4c5-aec0-4aa2-aaa9-70b0722c8c0&title=
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页:
[1]