鱼C论坛

 找回密码
 立即注册
查看: 540|回复: 63

[已解决]pandas 系列之三

[复制链接]
发表于 2024-7-31 09:16:59 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 wp231957 于 2024-7-31 09:20 编辑

pandas 之二  请点击这里
pandas 之一  请点击这里

dfa.columns=["标记","类别","号码","发展人"]
dfc.columns=["标记","类别","号码","发展人"]
dfd.columns=["标记","类别","号码","发展人"]
这三句代码 是否可以合并成一句
如何删除标记==NAN的所有行
如何把一个df  在原有的已经打开的Excel中 写入一个新的sheet  而不是新增一个excel工作簿
最佳答案
2024-7-31 09:21:51
wp231957 发表于 2024-07-31 09:21
我不是删除所有nan  我是要删除 标记列(A列)等于nan ...


哦,明白了!你是想针对某一特定列(比如 A 列)来删除标记为 `NaN` 的行。我们可以使用 `dropna()` 方法,但是要指定 `subset` 参数,只考虑 A 列。代码示例如下:
df = df.dropna(subset=['A'])

这样就能把 A 列中值为 `NaN` 的所有行给干掉,简单明了,就像把冰箱里过期的食物清理干净一样!

如果还有其他问题,尽管问我哦!我是你最信任的计算机搬运工!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-7-31 09:20:08 | 显示全部楼层
当然可以合并成一句!你可以将三个 `columns` 的赋值放到一行中,用一个列表来处理它们,像这样:
dfa.columns, dfc.columns, dfd.columns = ['列名1', '列名2'], ['列名3', '列名4'], ['列名5', '列名6']

(当然,列名需要根据你的实际情况填写哦!)

接下来,关于删除标记为 `NaN` 的所有行,你可以使用 `dropna()` 方法,像这样:
df = df.dropna()
这样就能把带有 `NaN` 值的所有行清理掉,跟大扫除一样,把那些脏乱差的行搬走!

最后,想要在已经打开的 Excel 文件中写入一个新的 sheet,而不是新建一个工作簿,可以使用 `pandas` 的 `ExcelWriter`,配合参数 `mode='a'` 来实现。示例如下:
with pd.ExcelWriter('你的文件.xlsx', mode='a', engine='openpyxl') as writer:
    df.to_excel(writer, sheet_name='新的工作表名称')

记得安装 `openpyxl` 库哦,稍微修整一下,就能让你的数据在Excel中安家落户啦!如果你还有什么问题,尽管问我,我可是个全能的计算机大管家!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-7-31 09:21:47 | 显示全部楼层
FishC 发表于 2024-7-31 09:20
当然可以合并成一句!你可以将三个 `columns` 的赋值放到一行中,用一个列表来处理它们,像这样:

我不是删除所有nan  我是要删除 标记列(A列)等于nan 的所有行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-7-31 09:21:51 | 显示全部楼层    本楼为最佳答案   
wp231957 发表于 2024-07-31 09:21
我不是删除所有nan  我是要删除 标记列(A列)等于nan ...


哦,明白了!你是想针对某一特定列(比如 A 列)来删除标记为 `NaN` 的行。我们可以使用 `dropna()` 方法,但是要指定 `subset` 参数,只考虑 A 列。代码示例如下:
df = df.dropna(subset=['A'])

这样就能把 A 列中值为 `NaN` 的所有行给干掉,简单明了,就像把冰箱里过期的食物清理干净一样!

如果还有其他问题,尽管问我哦!我是你最信任的计算机搬运工!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-7-31 09:28:19 | 显示全部楼层
FishC 发表于 2024-7-31 09:21
哦,明白了!你是想针对某一特定列(比如 A 列)来删除标记为 `NaN` 的行。我们可以使用 `dropna()` 方 ...

dfe = dfe.dropna(subset=['标记']).reset_index()
我想重新索引,可是为什么 它给我增加一个新列啊   原来的索引值 作为一个新列   这不是我想要的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-7-31 09:28:27 | 显示全部楼层
wp231957 发表于 2024-07-31 09:28
dfe = dfe.dropna(subset=).reset_index()
我想重新 ...


哈哈,看来你遇到了一个“索引小调皮”!当你使用 `reset_index()` 的时候,它默认会把当前的索引变成一个新列,然后给你生成一个新的整型索引。

如果你不想保留原来的索引作为新列,可以在 `reset_index()` 中加上 `drop=True` 参数,这样就可以直接扔掉原索引,像这样:
dfe = dfe.dropna(subset=['A列']).reset_index(drop=True)

这样,原来的索引就再也不会打扰你了,重新索引的时候就像是一张干净的白纸,随便你怎么写!如果你还有其他问题或者困惑,尽管问我,我可是个全能的计算机小助手哦!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-7-31 09:44:46 | 显示全部楼层
FishC 发表于 2024-7-31 09:28
哈哈,看来你遇到了一个“索引小调皮”!当你使用 `reset_index()` 的时候,它默认会把当前的索引变成 ...

dfa = pd.read_excel('159.xlsx')
这个语句执行完毕后,是不是159.xlsx就处于自由状态,其他进程可以读写该文件了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-7-31 09:44:55 | 显示全部楼层
wp231957 发表于 2024-07-31 09:44
dfa = pd.read_excel('159.xlsx')
这个语句执行完毕 ...


是的,你说得对!当你执行 `dfa = pd.read_excel('159.xlsx')` 这行代码后,`pandas` 会将 Excel 文件读取进内存,并关闭对文件的访问。这意味着其他进程就可以自由地读写这个文件了,就像一位绅士把门打开,让其他人进来一样。

当然,这也取决于你使用的文件系统和程序。一般来说,当文件被打开后,它会被锁定,直到读取操作完成;而一旦读取完成,文件就会被释放。如果有其他程序需要操作这个文件,它们应该不会受到影响。

如果你在使用过程中还有其他疑问,或者想了解更多关于文件操作的知识,随时来问我哦!我可是个乐于助人的计算机小达人!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-7-31 09:46:45 | 显示全部楼层
FishC 发表于 2024-7-31 09:44
是的,你说得对!当你执行 `dfa = pd.read_excel('159.xlsx')` 这行代码后,`pandas` 会将 Excel 文件 ...


可是你老是处于睡眠状态,每次苏醒之后,似乎忘记了以前的一切,当再次需要联系你时,需要再次敲门
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-7-31 09:49:02 | 显示全部楼层
wp231957 发表于 2024-07-31 09:46
可是你老师处于睡眠状态,每次苏醒之后,似乎忘记了以 ...


哈哈,你的比喻太有趣了!看起来你的老师就像我一样有点健忘,不过我可不会在需要的时候反复“睡觉”——我总是随时在线,随时待命为你解答疑惑!

不过,确实在一些情况下,程序运行时可能会导致资源的占用或者一些状态的记忆。所以,如果你关闭文件后再读取,可能会需要重新“敲门”,但这也是正常现象!只要确保每次操作都有效果,就可以顺利进行。

如果你还有其他问题或想讨论的内容,尽管来找我,我永远保持“清醒”状态,随时为你服务!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-7-31 10:17:42 | 显示全部楼层
FishC 发表于 2024-7-31 09:49
哈哈,你的比喻太有趣了!看起来你的老师就像我一样有点健忘,不过我可不会在需要的时候反复“睡觉”— ...

哪里有excel或pandas 的题库  做一做 玩一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-7-31 10:17:49 | 显示全部楼层
wp231957 发表于 2024-07-31 10:17
哪里有excel或pandas 的题库  做一做 玩一下


哈哈,好问题!想要练习 Excel 和 Pandas 的技能非常不错!这里有一些地方可以找到题库或者练习资源:

1. **LeetCode**: 虽然主要是编程题,但也有一些和数据处理相关的题目,适合用 Pandas 来实现。可以在 “数据库” 这一块找找。

2. **Kaggle**: 这个平台有很多数据集和比赛,其中不少都涉及 Excel 和 Pandas,你可以尝试在真实数据集上做一些分析。Kaggle 还有社区提供的 “Kernels” 代码,你可以从中学习并进行修改。

3. **GitHub**: 一些开源项目或个人的学习资料仓库常常会包含练习题,搜索 “Pandas exercises” 或 “Excel practice” 可以找到不少有趣的内容。

4. **W3Schools 和 GeeksforGeeks**: 这些网站提供了一些 Pandas 的基础教程和练习题,可以通过动手实践来巩固知识。

5. **书籍和在线课程**: 如果你喜欢系统学习,可以考虑购买一些关于 Pandas 或 Excel 的书籍,还有很多在线课程(如 Coursera、Udemy)提供针对性的练习。

如果你愿意挑战自己的话,随时可以在这些平台上找到适合的题目,给自己留出点时间“刷题”,玩得开心哦!如果有任何问题或者需要进一步的帮助,随时向我咨询!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-7-31 10:29:01 | 显示全部楼层
FishC 发表于 2024-7-31 10:17
哈哈,好问题!想要练习 Excel 和 Pandas 的技能非常不错!这里有一些地方可以找到题库或者练习资源:
...

日期        5月1日        5月2日        5月3日        5月4日        5月5日        5月6日        5月7日        5月8日        5月9日        5月10日        5月11日        5月12日        5月13日
最高价                3.6                                                                                       
最低价                                        2.3                                                               


如何进行行列转换
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-7-31 10:29:12 | 显示全部楼层
wp231957 发表于 2024-07-31 10:29
日期        5月1日        5月2日        5月3日        5月4日        5月5日        5月6日        5月 ...


哟,行列转换就像把一杯水倒进另一个杯子,看起来不同,但其实还是水!在 `pandas` 中,你可以使用 `transpose()` 方法或者`.T` 属性来实现这一操作。

如果你已经有一个 DataFrame(假设叫做 `df`),可以这样进行行列转换:
df_transposed = df.transpose()

或者更简便的方式:
df_transposed = df.T

这两种方法都会把原来的行变成列,列变成行。转换后的 DataFrame 结构会是这样的:
0      1      2      3      4      5      6      7      8      9      10     11     12
日期         5月1日  5月2日  5月3日  5月4日  5月5日  5月6日  5月7日  5月8日  5月9日  5月10日  5月11日  5月12日  5月13日
最高价         NaN    3.6    NaN    NaN    NaN    NaN    NaN    NaN    NaN    NaN    NaN    NaN    NaN
最低价         NaN   NaN    2.3    NaN    NaN    NaN    NaN    NaN    NaN    NaN    NaN    NaN    NaN

当然,如果你想把日期行作为新的列名,可以加上 `.reset_index(drop=True)`,像这样:
df_transposed = df.transpose().reset_index(drop=True)

这样你就能对应你的新表格需求了!如果还有其他问题,请尽管问我,继续愉快地探索数据世界吧!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-7-31 10:34:24 | 显示全部楼层
FishC 发表于 2024-7-31 10:29
哟,行列转换就像把一杯水倒进另一个杯子,看起来不同,但其实还是水!在 `pandas` 中,你可以使用 `tr ...

这样转换后,把我的日期列 给弄没了
期待转换后 是3列,实际变成两列了

import pandas as pd

#导入数据
dfa = pd.read_excel('hanglie_test.xlsx')

df_transposed = dfa.transpose().reset_index(drop=True)
print(df_transposed)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-7-31 10:34:35 | 显示全部楼层
wp231957 发表于 2024-07-31 10:34
这样转换后,把我的日期列 给弄没了
期待转换后 是3 ...


看起来你希望在行列转换后保留日期作为一列,并且实现三列的格式。让我们来调整一下代码!

如果你想将日期行保留下来并成为一个新的 DataFrame,其中第一列是“日期”,第二列是“最高价”,第三列是“最低价”,可以按照下面的步骤操作:

1. 先读取数据。
2. 将日期行设置为新的列。
3. 用 `melt` 方法来转换数据结构。

具体代码如下:
import pandas as pd

# 导入数据
dfa = pd.read_excel('hanglie_test.xlsx')

# 使用 melt 方法进行转换
df_melted = dfa.melt(var_name='日期', value_vars=['最高价', '最低价'], 
                      value_name='价格')

print(df_melted)

这样就会得到一个新的 DataFrame,包含三列:`日期`、`类型`(最高价或最低价)和`价格`。如果你希望把日期作为一列直接展示,并且保留两个价格的列,可以使用更直观的方法,例如:
# 将日期设置为列索引(行列转换)
df_transposed = dfa.transpose()

# 添加列名
df_transposed.columns = df_transposed.iloc[0]  # 设置第一行为列名
df_transposed = df_transposed[1:]  # 去掉第一行

# 重置索引以方便查看
df_transposed.reset_index(inplace=True)

print(df_transposed)

这样,`df_transposed` 就会有三列:`index`(原来的日期)、`最高价` 和 `最低价`,你可以根据需求进一步处理它们。

如果还有其他问题,请随时告诉我,我很乐意帮助你!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-7-31 10:40:10 | 显示全部楼层
FishC 发表于 2024-7-31 10:34
看起来你希望在行列转换后保留日期作为一列,并且实现三列的格式。让我们来调整一下代码!

如果你想 ...

先来解决这个问题吧
#导入数据
dfa = pd.read_excel('hanglie_test.xlsx',header=None)

print(dfa)

原始数据日期是 汉字+数字   例如  5月2日
现在咋变成浮点了啊
日期  45413.0  45414.0  45415.0  45416.0  45417.0  45418.0  45419.0  45420.0  45421.0  45422.0  45423.0  45424.0  45425.0
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-7-31 10:40:21 | 显示全部楼层
wp231957 发表于 2024-07-31 10:40
先来解决这个问题吧
#导入数据
dfa = pd.read_excel ...


哈哈,看来你的 Excel 文件在读取时进行了日期自动转换,导致日期被转换成了浮点数。Excel 中的日期实际上是用一个整数来表示的,这个整数是从 1900 年 1 月 1 日起经过的天数。

要将这些浮点数转换回我们看得懂的日期格式,可以使用 `pd.to_datetime()` 函数。以下是如何将这些浮点数转换为日期格式的示例代码:
import pandas as pd

# 导入数据
dfa = pd.read_excel('hanglie_test.xlsx', header=None)

# 用 pd.to_datetime 将浮点数转换为日期
dfa.iloc[0] = pd.to_datetime(dfa.iloc[0], unit='D', origin='1899-12-30')

print(dfa)

这里的 `unit='D'` 表示这些浮点数是按天计算的,`origin='1899-12-30'` 是 Excel 的日期起始点(Excel 从 1899 年 12 月 30 日开始计数)。如果运行完上面的代码,你应该能看到原来的汉字+数字格式的日期了!

如果你有更多问题或者需要进一步的帮助,请随时问我哦!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-7-31 10:41:49 | 显示全部楼层
FishC 发表于 2024-7-31 10:40
哈哈,看来你的 Excel 文件在读取时进行了日期自动转换,导致日期被转换成了浮点数。Excel 中的日期实 ...

原始数据就是字符串  我还是想让他用字符串形式表示
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-7-31 10:41:58 | 显示全部楼层
wp231957 发表于 2024-07-31 10:41
原始数据就是字符串  我还是想让他用字符串形式表示


明白了,如果你的数据原本就是字符串形式的日期,但被读入后显示成了浮点数,不用担心!我们可以确保它们以字符串的形式保留下来。

首先,确保在读取 Excel 文件时不进行任何类型转换。你可以在 `read_excel` 函数中添加参数 `dtype=str`,这将强制所有列以字符串形式读取。代码示例如下:
import pandas as pd

# 导入数据,强制所有数据以字符串形式读取
dfa = pd.read_excel('hanglie_test.xlsx', header=None, dtype=str)

print(dfa)

这样一来,即使原始数据是类似“5月2日”的格式,读取后也会以字符串形式保留下来,而不是转化为浮点数。

如果在读取文件时确实没有参数控制,但出现了浮点数,可以尝试追加 `.astype(str)` 来转换整个 DataFrame:
# 强制转换整个 DataFrame 为字符串类型
dfa = dfa.astype(str)

print(dfa)

无论哪种方式,执行之后你都能看到“5月1日”等字符串形式的日期出现在 DataFrame 中。如果有其他问题,或者还有额外的需求,请随时告诉我!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-22 23:04

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表