赞
踩
dataframe为pandas中的数据格式,通常用来存储时间序列数据,比如K线数据,这在量化分析时通常用到。
在Python中,可以使用pandas库来创建和操作数据帧(DataFrame)。DataFrame是一个二维数据结构,类似于表格,其中包含了行和列。以下是如何使用pandas创建和操作DataFrame的基本示例。首先,确保已经安装了pandas库。可以使用以下命令来安装:
pip install pandas
然后,在你的代码中导入pandas模块:
import pandas as pd
创建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)
- df = pd.read_csv(data_path)
- df.to_csv(data_path, index=False, encoding = 'utf-8')
- #index = False表示不保存索引
- 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]
-
- 返回列数:
- df.shape[1]
- 返回行数:
- df.shape[0]
- 或者:
- len(df)
- 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[]方法更有效
- df.iloc[:3, 0:2]
- df.iloc[:3, 0:2].values
- df.isnull().any() 用来判断某列是否有缺失值
- df.isnull().all() 用来判断某列是否全部为空值
- df.dropna()默认删除了含有缺失值的所有行,如果我们只需要把某一行所有数据为缺失值的才删除,那么需要用how=‘all’进行限制,如df2.dropna(how='all')
- 如果要删除DataFrame的缺失值所在的列,那么只需加上axis=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()方法。
要根据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)。
- 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)
可以使用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)
- 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()
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。