import pandas as pd
df = pd.read_csv('nba.csv')
print(df.to_string())
函数:read_csv(文件地址或根目录下名称)
这里有个细节,df读出的内容是有中间省略的。因此有df.to_string()方法来转为DataFrame类型。
直接读取如下:
Name Team Number Position Age Height Weight College Salary
0 Avery Bradley Boston Celtics 0.0 PG 25.0 6-2 180.0 Texas 7730337.0
1 Jae Crowder Boston Celtics 99.0 SF 25.0 6-6 235.0 Marquette 6796117.0
2 John Holland Boston Celtics 30.0 SG 27.0 6-5 205.0 Boston University NaN
3 R.J. Hunter Boston Celtics 28.0 SG 22.0 6-5 185.0 Georgia State 1148640.0
4 Jonas Jerebko Boston Celtics 8.0 PF 29.0 6-10 231.0 NaN 5000000.0
.. ... ... ... ... ... ... ... ... ...
453 Shelvin Mack Utah Jazz 8.0 PG 26.0 6-3 203.0 Butler 2433333.0
454 Raul Neto Utah Jazz 25.0 PG 24.0 6-1 179.0 NaN 900000.0
455 Tibor Pleiss Utah Jazz 21.0 C 26.0 7-3 256.0 NaN 2900000.0
456 Jeff Withey Utah Jazz 24.0 C 26.0 7-0 231.0 Kansas 947276.0
457 NaN NaN NaN NaN NaN NaN NaN NaN NaN
import pandas as pd
# 三个字段 name, site, age
nme = ["Google", "Runoob", "Taobao", "Wiki"]
st = ["www.google.com", "www.runoob.com", "www.taobao.com", "www.wikipedia.org"]
ag = [90, 40, 80, 98]
# 字典
dict = {'name': nme, 'site': st, 'age': ag}
df = pd.DataFrame(dict)
# 保存 dataframe
df.to_csv('site.csv')
方法:to_csv() ,参数为保存地址+名称,直接传名称则保存在当前根目录。
以上需要注意的是,to_csv()函数是被DataFrame对象调用的。
其次注意观察,dict数据结构的构成,它的value是调用来的,需要注意应用这种方式到项目。
head()方法,返回前n行数据。
入参:行数
默认不填时返回前五行
ps:这里要理解,pandas处理数据的方法,都是建立在读取或创建后的DataFrame之上的。
tail()方法,略。与上述类似,取尾部数据。
info()方法,取表格基本信息,包括:有多少行多少列,列名,字段类型,是否为空等。
这里json格式可以用列表包字典来记忆,二者差别参见:
Python学习笔记——字典和JSON的区别_python字典与json的区别_JaneLeeee的博客-CSDN博客
import pandas as pd
df = pd.read_json('sites.json')
print(df.to_string())
方法read_json()
to_string() 用于返回 DataFrame 类型的数据,我们也可以直接处理 JSON 字符串
由于字典的数据结构和json可以视作一致,处理字典化的json时可以直接将其DataFrame再处理。
import pandas as pd
# 字典格式的 JSON
s = {
"col1":{"row1":1,"row2":2,"row3":3},
"col2":{"row1":"x","row2":"y","row3":"z"}
}
# 读取 JSON 转为 DataFrame
df = pd.DataFrame(s)
print(df)
除了从文件中读json和直接读字典化的json数据对象,read_json()还可以从URL中读取json数据。
import pandas as pd
URL = 'https://static.runoob.com/download/sites.json'
df = pd.read_json(URL)
print(df)
{
"school_name": "ABC primary school",
"class": "Year 1",
"students": [
{
"id": "A001",
"name": "Tom",
"math": 60,
"physics": 66,
"chemistry": 61
},
{
"id": "A002",
"name": "James",
"math": 89,
"physics": 76,
"chemistry": 51
},
{
"id": "A003",
"name": "Jenny",
"math": 79,
"physics": 90,
"chemistry": 78
}]
}
对于上述格式数据,字典的某个key对应的value又是一个json格式,直接用read_json()读取时如下:
school_name class students
0 ABC primary school Year 1 {'id': 'A001', 'name': 'Tom', 'math': 60, 'phy...
1 ABC primary school Year 1 {'id': 'A002', 'name': 'James', 'math': 89, 'p...
2 ABC primary school Year 1 {'id': 'A003', 'name': 'Jenny', 'math': 79, 'p...
那么如何把最内层的value里的json读出来呢。
首先应该从json文件里把data读取出来,然后再使用normalize()函数来将数据展平
import pandas as pd
import json
# 使用 Python JSON 模块载入数据
with open('nested_list.json','r') as f:
data = json.loads(f.read())
# 展平数据
df_nested_list = pd.json_normalize(data, record_path =['students'])
print(df_nested_list)
方法json.loads(),将读取到的json数据转化为json字典。
ps:插入小知识点
json.load()从json文件中读取数据
json.loads()将str类型的数据转换为dict类型
json.dumps()将dict类型的数据转成str
json.dump()将数据以json的数据类型写入文件中
方法json_normalize(),这里record_path很容易看出是复杂json的外层key。因此此方法将students对应的value,也就是内层json给读了出来作为DataFrame。
运行结果如下:
id name math physics chemistry 0 A001 Tom 60 66 61 1 A002 James 89 76 51 2 A003 Jenny 79 90 78
此时如果想要把外层key,value追加到一张表上,则可以给normalize()函数增加参数meta=['school_name', 'class']
如下:
import pandas as pd
import json
# 使用 Python JSON 模块载入数据
with open('nested_list.json','r') as f:
data = json.loads(f.read())
# 展平数据
df_nested_list = pd.json_normalize(
data,
record_path =['students'],
meta=['school_name', 'class']
)
print(df_nested_list)
运行结果如下:
id name math physics chemistry school_name class 0 A001 Tom 60 66 61 ABC primary school Year 1 1 A002 James 89 76 51 ABC primary school Year 1 2 A003 Jenny 79 90 78 ABC primary school Year 1
{
"school_name": "local primary school",
"class": "Year 1",
"info": {
"president": "John Kasich",
"address": "ABC road, London, UK",
"contacts": {
"email": "[email protected]",
"tel": "123456789"
}
},
"students": [
{
"id": "A001",
"name": "Tom",
"math": 60,
"physics": 66,
"chemistry": 61
},
{
"id": "A002",
"name": "James",
"math": 89,
"physics": 76,
"chemistry": 51
},
{
"id": "A003",
"name": "Jenny",
"math": 79,
"physics": 90,
"chemistry": 78
}]
}
对于以上json,你可以注意下面meta的使用层次。
import pandas as pd
import json
# 使用 Python JSON 模块载入数据
with open('nested_mix.json','r') as f:
data = json.loads(f.read())
df = pd.json_normalize(
data,
record_path =['students'],
meta=[
'class',
['info', 'president'],
['info', 'contacts', 'tel']
]
)
print(df)
运行结果如下:
id name math physics chemistry class info.president info.contacts.tel
0 A001 Tom 60 66 61 Year 1 John Kasich 123456789
1 A002 James 89 76 51 Year 1 John Kasich 123456789
2 A003 Jenny 79 90 78 Year 1 John Kasich 123456789
如果取复杂json内部的某个属性,比如下列math的value
{
"school_name": "local primary school",
"class": "Year 1",
"students": [
{
"id": "A001",
"name": "Tom",
"grade": {
"math": 60,
"physics": 66,
"chemistry": 61
}
},
{
"id": "A002",
"name": "James",
"grade": {
"math": 89,
"physics": 76,
"chemistry": 51
}
},
{
"id": "A003",
"name": "Jenny",
"grade": {
"math": 79,
"physics": 90,
"chemistry": 78
}
}]
}
这里用到glom模块
ps:glom模块的使用方法python数据解析模块之glom模块的使用(一)-WinFrom控件库|.net开源控件库|HZHControls官网
import pandas as pd
from glom import glom
df = pd.read_json('nested_deep.json')
data = df['students'].apply(lambda row: glom(row, 'grade.math'))
print(data)
仔细观察上述代码,df对象通过‘students’这一key值取到了对应的json结构。然后调用pandas的apply()方法,简单的应用apply(func()).
ps:pandas的apply()使用方法。python数据分析技巧篇-apply高级函数 - 知乎
Python apply函数_fcyh的博客-CSDN博客
以上代码中是入参了lambda生成的匿名函数。ps:python——lambda函数_python lambda函数_PL C的博客-CSDN博客
glom()的作用:从target目标里取出对应key的value,其中key为一段字符串,类似文件层级,以‘.’表示层级,直到对应的最内层的属性key。