wp231957 发表于 2024-7-31 09:16:59

pandas 系列之三

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

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

dfa.columns=["标记","类别","号码","发展人"]
dfc.columns=["标记","类别","号码","发展人"]
dfd.columns=["标记","类别","号码","发展人"]
这三句代码 是否可以合并成一句
如何删除标记==NAN的所有行
如何把一个df在原有的已经打开的Excel中 写入一个新的sheet而不是新增一个excel工作簿

FishC 发表于 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 小助理,如未能正确解答您的问题,请继续追问。

wp231957 发表于 2024-7-31 09:21:47

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




我不是删除所有nan我是要删除 标记列(A列)等于nan 的所有行

FishC 发表于 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 小助理,如未能正确解答您的问题,请继续追问。

wp231957 发表于 2024-7-31 09:28:19

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

dfe = dfe.dropna(subset=['标记']).reset_index()
我想重新索引,可是为什么 它给我增加一个新列啊   原来的索引值 作为一个新列   这不是我想要的

FishC 发表于 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 小助理,如未能正确解答您的问题,请继续追问。

wp231957 发表于 2024-7-31 09:44:46

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

dfa = pd.read_excel('159.xlsx')
这个语句执行完毕后,是不是159.xlsx就处于自由状态,其他进程可以读写该文件了

FishC 发表于 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 小助理,如未能正确解答您的问题,请继续追问。

wp231957 发表于 2024-7-31 09:46:45

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

可是你老是处于睡眠状态,每次苏醒之后,似乎忘记了以前的一切,当再次需要联系你时,需要再次敲门

FishC 发表于 2024-7-31 09:49:02

wp231957 发表于 2024-07-31 09:46
可是你老师处于睡眠状态,每次苏醒之后,似乎忘记了以 ...

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

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

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

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

wp231957 发表于 2024-7-31 10:17:42

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

哪里有excel或pandas 的题库做一做 玩一下

FishC 发表于 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 小助理,如未能正确解答您的问题,请继续追问。

wp231957 发表于 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                                                               


如何进行行列转换

FishC 发表于 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 小助理,如未能正确解答您的问题,请继续追问。

wp231957 发表于 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)

FishC 发表于 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# 设置第一行为列名
df_transposed = df_transposed# 去掉第一行

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

print(df_transposed)

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

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

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

wp231957 发表于 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.045414.045415.045416.045417.045418.045419.045420.045421.045422.045423.045424.045425.0

FishC 发表于 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 = pd.to_datetime(dfa.iloc, unit='D', origin='1899-12-30')

print(dfa)

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

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

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

wp231957 发表于 2024-7-31 10:41:49

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

原始数据就是字符串我还是想让他用字符串形式表示

FishC 发表于 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 小助理,如未能正确解答您的问题,请继续追问。
页: [1] 2 3 4
查看完整版本: pandas 系列之三