python dataframe详细使用方法
dataframe为pandas中的数据格式,通常用来存储时间序列数据,比如K线数据,这在量化分析时通常用到。
在Python中,可以使用pandas库来创建和操作数据帧(DataFrame)。DataFrame是一个二维数据结构,类似于表格,其中包含了行和列。以下是如何使用pandas创建和操作DataFrame的基本示例。首先,确保已经安装了pandas库。可以使用以下命令来安装:
pip install pandas
然后,在你的代码中导入pandas模块:
import pandas as pd
1 创建dataframe
创建DataFrame可以有多种方式,其中一种常见的方式是使用字典来创建。每个键表示列名,对应的值是列的数据。例如,创建一个包含学生姓名和对应年龄的DataFrame:
import pandas as pd
df = pd.DataFrame([[1,2,3,4],[5,6,7,8]], columns=['a', 'b', 'c', 'd'])
data = {'Name': ['Alice', 'Bob', 'Charlie'],
'Age': [20, 21, 19]}
#这将创建一个包含两列的DataFrame,其中第一列是"Name",第二列是"Age"。每一列的数据由对应的值给出。
df = pd.DataFrame(data)
2 读取csv文件为dataframe格式,或保存为csv文件
df = pd.read_csv(data_path)
df.to_csv(data_path, index=False, encoding = 'utf-8')
#index = False表示不保存索引
3 基本数据操作:增删改查
df.columns
df.index
print(df.values)
print(7 in df.values)
# 获取DataFrame的所有列
columns = df.columns
# 获取特定列的数据
name_column = df['Name']
# 获取特定行的数据
row = df.loc[0] # 使用标签索引
# 添加新列
df['Gender'] = ['F', 'M', 'M']
# 删除列
df = df.drop('Age', axis=1)
# 删除行
df = df.drop(0)
# 根据条件筛选数据
filtered_df = df[df['Age'] > 20]
4 行列数量查询
返回列数:
df.shape[1]
返回行数:
df.shape[0]
或者:
len(df)
5 修改行列索引名称与查找
df.index = df['列名']
df.rename(columns={'原名称':'新名称'},inplace=True)
data = {'Name': ['Alice', 'Bob', 'Charlie'],
'Age': [20, 21, 19]}
df = pd.DataFrame(data, index=['A', 'B', 'C'])
在DataFrame中,可以使用set_index()方法来设置特定列作为索引。索引是用于标识和访问DataFrame中行的标签。
以下是一个示例,展示如何将"Name"列设置为索引:
import pandas as pd
data = {'Name': ['Alice', 'Bob', 'Charlie'],
'Age': [20, 21, 19]}
df = pd.DataFrame(data)
df = df.set_index('Name')
# 将索引重置为默认的整数索引
df = df.reset_index()
# 打印重置索引后的DataFrame
print("重置索引后的DataFrame:")
print(df)
在上面的示例中,我们使用set_index()方法将"Name"列作为索引列。这将返回一个新的DataFrame对象,并将"Name"列从原始DataFrame中移除,变成了索引列。
现在,通过索引列可以直接访问特定的行数据。例如,要获取姓名为"Alice"的行数据,可以使用以下方式:
alice_row = df.loc['Alice']
# 根据索引修改"Age"列的值
df.loc[1, 'Age'] = 22
在上面的示例中,我们首先创建了一个名为df的DataFrame对象。然后,我们使用.loc[]方法选择索引为1的行和"Age"列,并将其值修改为22。
通过使用.loc[]方法,我们可以根据索引和列名准确定位到要修改的元素。
最后,我们打印出修改后的DataFrame,以验证是否成功修改了特定索引位置的"Age"值。
请注意,.at[]方法也可以用于准确访问和修改单个元素,如果只需修改单个元素,.at[]方法比.loc[]方法更有效
6 iloc索引,整数数值索引
df.iloc[:3, 0:2]
df.iloc[:3, 0:2].values
7 判断是否有缺失值nan
df.isnull().any() 用来判断某列是否有缺失值
df.isnull().all() 用来判断某列是否全部为空值
df.dropna()默认删除了含有缺失值的所有行,如果我们只需要把某一行所有数据为缺失值的才删除,那么需要用how=‘all’进行限制,如df2.dropna(how='all')
如果要删除DataFrame的缺失值所在的列,那么只需加上axis=1即可
8 排序
8.1 单列排序
df2 = df1.sort_values(by=['列名'], ascending = [True]) #升序排列
要按照DataFrame中的某一列(例如"Age")进行排序,可以使用sort_values()方法。
以下是一个示例,展示如何按照"Age"列进行排序:
import pandas as pd
data = {'Name': ['Alice', 'Bob', 'Charlie'],
'Age': [20, 21, 19]}
df = pd.DataFrame(data)
# 按照"Age"列进行升序排序
df_sorted = df.sort_values('Age')
# 打印排序后的DataFrame
print("根据Age列进行升序排序后的DataFrame:")
print(df_sorted)
在上面的示例中,我们首先创建了一个名为df的DataFrame对象。然后,我们使用sort_values()方法,并将要排序的列名"Age"作为参数传递给它。
默认情况下,sort_values()方法将按照指定列的值进行升序排序。排序后,会返回一个新的已排序的DataFrame对象。
最后,我们打印出排序后的DataFrame,以验证是否按照"Age"列进行了升序排序。
如果你想按照降序进行排序,可以将 ascending=False 作为参数传递给sort_values()方法。
8.2 多列排序
要根据DataFrame中的两列进行排序,您可以使用sort_values()方法。以下是一个示例:
import pandas as pd
# 创建示例DataFrame
data = {'A': [1, 2, 3, 4, 5],
'B': [10, 9, 8, 7, 6]}
df = pd.DataFrame(data)
# 根据列A和列B进行排序
df_sorted = df.sort_values(by=['A', 'B'])
# 打印排序后的结果
print(df_sorted)
在上面的示例中,我们首先创建了一个示例的DataFrame df,其中包含两列A和B。
然后,我们使用sort_values()方法对DataFrame进行排序。在by参数中,我们传递一个列表,指定要根据哪些列进行排序。在这个例子中,我们根据列A和列B进行排序。
最后,我们打印了排序后的结果。
请注意,sort_values()方法返回一个新的已排序的DataFrame,原始的DataFrame不会被修改。如果您希望就地修改原始的DataFrame,可以传递inplace=True参数,例如:df.sort_values(by=['A', 'B'], inplace=True)。
排序时,默认情况下按升序进行排序。如果您想要降序排序,可以将参数ascending=False传递给sort_values()方法,例如:df.sort_values(by=['A', 'B'], ascending=False)。
9 交集并集补集
df1 = DataFrame([['a', 10, '男'],
['b', 11, '男'],
['c', 11, '女'],
['a', 10, '女'],
['c', 11, '男']],
columns=['name', 'age', 'sex'])
df2 = DataFrame([['a', 10, '男'],
['b', 11, '女']],
columns=['name', 'age', 'sex'])
取交集:print(pd.merge(df1,df2,on=['name', 'age', 'sex']))
取并集:print(pd.merge(df1,df2,on=['name', 'age', 'sex'], how='outer'))
取差集(从df1中过滤df1在df2中存在的行):
df1 = df1.append(df2)
df1 = df1.append(df2)
df1 = df1.drop_duplicates(subset=['name', 'age', 'sex'],keep=False)
print(df1)
10 复制DataFrame
可以使用copy()方法创建原始DataFrame的副本。这样做可以确保完全复制数据和索引,而不仅是引用。以下是一个示例,展示如何根据索引复制DataFrame:
import pandas as pd
data = {'Name': ['Alice', 'Bob', 'Charlie'],
'Age': [20, 21, 19]}
df = pd.DataFrame(data)
# 复制DataFrame
df_copy = df.copy()
# 打印原始DataFrame和副本
print("原始DataFrame:")
print(df)
print()
print("复制的DataFrame:")
print(df_copy)
11 将sqlite3数据库中内容读取为dataframe
import sqlite3
import pandas as pd
# 连接到SQLite数据库
conn = sqlite3.connect('example.db')
# 使用SQL查询语句获取数据并将其存储在DataFrame中
query = "SELECT * FROM your_table_name;"
df = pd.read_sql_query(query, conn)
# 打印DataFrame
print(df)
# 关闭数据库连接
conn.close()
更多推荐
所有评论(0)