python_pandas(创建/加载数据/选择数据)

刚刚使用Python学习进行数据分析,分享一些概念和想法,希望可以大家一起讨论,如果理解或者表达有不准确的地方,请多多指点,不吝赐教,非常感谢~~

Pandas是一个用于处理表格数据的Python模块(即带有行和列的表中的数据)

  • 创建一个DataFrame

DataFrame是一个将数据存储为行和列的对象。您可以将DataFrame视为电子表格或SQL表格。您可以手动创建DataFrame,也可以使用CSV,Excel电子表格或SQL查询中的数据填充它。

DataFrames有行和列。每列都有一个名称,这是一个字符串。每行都有一个索引,它是一个整数。DataFrames可以包含许多不同的数据类型:字符串,整数,浮点数,元组等。

1.使用dictionary添加dataframe

# You can pass in a dictionary to DataFrame(). Each key is a column name and each value is a list of column values.
# The columns must all be the same length or you will get an error. 

df1 = pd.DataFrame({
    'name': ['John Smith', 'Jane Doe', 'Joe Schmo'],
    'address': ['123 Main St.', '456 Maple Ave.', '789 Broadway'],
    'age': [34, 28, 51]
})

-------------------------------------------------------------
address				age		name
123 Main St.		34		John Smith
456 Maple Ave.		28		Jane Doe
789 Broadway		51		Joe Schmo

# Note that the columns will appear in alphabetical order because dictionaries don’t have any inherent order for columns.

2. 使用 list of lists 添加dataframe

# you can pass in a list of lists, where each one represents a row of data. 
# Use the keyword argument columns to pass a list of column names.

df2 = pd.DataFrame([
    ['John Smith', '123 Main St.', 34],
    ['Jane Doe', '456 Maple Ave.', 28],
    ['Joe Schmo', '789 Broadway', 51]
    ],
    columns=['name', 'address', 'age'])
---------------------------------------------------------------
name			address				age		
John Smith		123 Main St.		34		
Jane Doe		456 Maple Ave.		28		
Joe Schmo		789 Broadway		51	

# we were able to control the ordering of the columns because we used lists.
	
  • 从另一个文件加载数据

CSV文件纯文本电子表格格式。可以在很多地方找到CSV:

  • Online datasets 在线数据集
  • 从Excel或Google表格导出
  • 从SQL导出

CSV的第一行包含列标题。所有后续行都包含值。每个列标题和每个变量用逗号分隔,如下所示:

xxxx.csv
column1,column2,column3
value1,value2,value3
python_pandas(创建/加载数据/选择数据)
1. 如果存在一个CSV文件,可以使用.read_csv()将文件下载到pandas的dataframe中

import pandas as pd

df=pd.read_csv('sample.csv')
print(df)

----------------------------------------------------------

	City			Population		Median Age
0	Maplewood		100000			40
1	Wayne			350000			33
2	Forrest Hills	300000			35
3	Paramus			400000			55
4	Hackensack		290000			39
  • 选择表的某些行或列

如果它是一个小型DataFrame,您可以通过键入来显示它print(df)。
如果它是一个更大的DataFrame,那么能够检查一些项目而不必查看整个DataFrame是有帮助的。

1. 查看列信息

# .info() gives some statistics for each column.

import pandas as pd

df = pd.read_csv('imdb.csv')
print(df.info())

-------------------------------------------------------------
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 220 entries, 0 to 219
Data columns (total 5 columns):
id             220 non-null int64
name           220 non-null object
genre          220 non-null object
year           220 non-null int64
imdb_rating    220 non-null float64
dtypes: float64(1), int64(2), object(2)
memory usage: 8.7+ KB
None

2. 查看行

# .head() gives the first 5 rows of a DataFrame. 
# If you want to see more rows, you can pass in the positional argument .head(n)

import pandas as pd

df = pd.read_csv('imdb.csv')
print(df.head())

-------------------------------------------------------------
	id	name										genre	year	imdb_rating	
0	1	Avatar										action	2009	7.9
1	2	Jurassic World								action	2015	7.3
2	3	The Avengers								action	2012	8.1
3	4	The Dark Knight								action	2008	9.0
4	5	Star Wars: Episode I - The Phantom Menace	action	1999	6.6
** 注意⚠️:.head()和.info()函数是,dataframe数据类型的方法,注意是谁调用该方法

3. 选择某一列的数据,返回Series

例如,当你需要某一列数值来计算其均值并绘制直方图时,我们只需要选择感兴趣的数据

# 有两种方法可以使用:
	1. dataframe类型的文件名['列名']
	2. dataframe类型的文件名.列名

import pandas as pd

df = pd.DataFrame([
  ['January', 100, 100, 23, 100],
  ['February', 51, 45, 145, 45],
  ['March', 81, 96, 65, 96],
  ['April', 80, 80, 54, 180],
  ['May', 51, 54, 54, 154],
  ['June', 112, 109, 79, 129]],
  columns=['month', 'clinic_east',
           'clinic_north', 'clinic_south',
           'clinic_west']
)

clinic_north=df.clinic_north 或者 clinic_north=df['clinic_north']
print(type(clinic_north))
print(type(df))

---------------------------------------------------------
<class 'pandas.core.series.Series'>
<class 'pandas.core.frame.DataFrame'>

4. 选择两列或多列

# select two or more columns from a DataFrame, we use a list of the column names. 
# !!!!!!是两层[] dataframe类型的文件名[['列名A','列名B']]

# 如上代码
clinic_north_south=df[['clinic_north','clinic_south']]
print(type(clinic_north_south))
-------------------------------------------------------
<class 'pandas.core.frame.DataFrame'>
** 注意⚠️:Make sure that you have a double set of brackets ([[]])

5. 选择一行数据,返回Series

# 使用 dataframe类型的文件名.iloc[index]方法,其中index从0开始


# 如上代码
march=df.iloc[2]
print(type(march))
-------------------------------------------------------------
<class 'pandas.core.series.Series'>

6.选择很多行数据

# 和列表等数据类型的索引使用方法一致:
	1. dataframe类型的文件名.iloc[3:7] 选择包括第3行但是不包括第7行的数据
	2. dataframe类型的文件名.iloc[:7] 选择头7行的数据
	3. dataframe类型的文件名.iloc[-3:] 选择后3行的数据


# 如上代码
april_may_june=df.iloc[3:6]
print(april_may_june)
--------------------------------------------------------------
	month	clinic_east		clinic_north	clinic_south	clinic_west
3	April	80				80				54					180
4	May		51				54				54					154
5	June	112				109				79					129
# 使用 dataframe类型的文件名.列名.isin(['列名A','列名B'])方法
# 注意⚠️:入参的数据类型要求 a list of values


# 如上代码
january_february_march=df[df.month.isin(['January','February','March'])]
print(january_february_march)
-------------------------------------------------------------
	month		clinic_east		clinic_north	clinic_south	clinic_west
0	January		100				100				23				100
1	February	51				45				145				45
2	March		81				96				65				96

7. 使用逻辑判断选择所需数据,无论多少行返回DataFrame

# 使用列名挑选所需数据,其中df是dataframe类型的文件名;age是文件中的某列
	1. df[df.age == 30]
	2. df[df.age > 30]
	3. df[df.age < 30]
	4. df[df.name != 'Clara Oswald']
	5. df[(df.age < 30) | (df.name == 'Martha Jones')]
	6. df[(df.age < 30) & (df.name == 'Martha Jones')]


# 如上代码
not_january=df[df.month!='January']
print(january)

march_clinic_east=df[(df.month=='March') |(df.clinic_east>81)]
print(march_clinic_east)
-------------------------------------------------------------
	month		clinic_east		clinic_north	clinic_south	clinic_west
1	February	51				45				145				45
2	March		81				96				65				96
3	April		80				80				54				180
4	May			51				54				54				154
5	June		112				109				79				129

	month		clinic_east		clinic_north	clinic_south	clinic_west
0	January		100				100				23				100
2	March		81				96				65				96
5	June		112				109				79				129

8. 设定索引

当我们使用逻辑选择DataFrame的子集时,我们最终得到非连续索引,会导致新的DataFrame难以使用.iloc[]:

  1. We can fix this using the method.reset_index()
  2. If we run the command df.reset_index(drop=True), we get a new DataFrame with new index
  3. If we use the keyword inplace=True we can just modify our existing DataFrame

python_pandas(创建/加载数据/选择数据)

** 区别iloc[]和loc[]函数

.loc[k]是读取dataframe中index为k的那一行
.iloc[k]是读取dataframe中的第k行

例如:
df3.loc[k]中,k只能取1,3,5;
df3.iloc[k]中,k只能取0,1,2
上一篇:Gym-101673 :East Central North America Regional Contest (ECNA 2017)(寒假自训第8场)


下一篇:3. Go并发编程--数据竞争