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()

  • 8
    点赞
  • 81
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Python中,DataFrame是pandas库中的一个数据结构,类似于表格或者电子表格。DataFrame可以用来处理和分析结构化数据。 要使用DataFrame,你可以使用DataFrame类的构造函数,传入一个字典、二维数组、Series对象等作为参数。你还可以通过设置index和columns参数来指定行索引和列标签。 使用loc属性可以根据行标签和列标签来访问DataFrame中的数据。例如,使用loc可以选择特定的行和列,或者使用切片操作选择连续的行和列。你可以参考引用中的链接了解更多关于loc属性的使用。 另外,如果你希望将一个字典转换为DataFrame,并且希望转换后的DataFrame的行顺序和原始数据一致,你可以使用pd.DataFrame.from_dict函数,并设置orient参数为'index'。这样转换后的DataFrame的行将按照原始字典中的顺序排列,你可以参考引用中的代码示例。 另外,如果你有一个嵌套字典,并且想将其转换为DataFrame,你可以直接使用pd.DataFrame构造函数,并传入嵌套字典作为参数。你可以参考引用中的代码示例。 总结起来,Python中的DataFrame可以通过构造函数和相关属性(如loc、iloc等)来创建和操作。可以根据需要选择不同的方法来处理和分析DataFrame中的数据。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [PythonDataFrame基础知识点](https://blog.csdn.net/u012856866/article/details/118936961)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Coding的叶子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值