鱼C论坛

 找回密码
 立即注册
查看: 1790|回复: 31

[已解决]pandas 保留数据

[复制链接]
发表于 2024-11-15 10:25:39 | 显示全部楼层 |阅读模式

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

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

x
假设df 有100多行数据   我要保留前面10行数据  其余的都不要了  改如何 写代码
最佳答案
2024-11-15 10:34:32
wp231957 发表于 2024-11-15 10:34
原始excel里面的  日期  列  显示  xx月xx日
用df=pd ...


在导入 Excel 文件后,如果日期列显示为整数,你可以将这些整数转换为正确的日期格式。通常,Excel 中的日期保存在格式 `yyyy-mm-dd` 作为整数表示,从 1899-12-31 开始。这是一个示例代码,说明如何将这种整数格式转换回日期:

  1. import pandas as pd

  2. # 导入 Excel 文件
  3. df = pd.read_excel("1234.xlsx")

  4. # 假设日期列名为 '日期'
  5. df['日期'] = pd.to_datetime(df['日期'], unit='D', origin='1899-12-30')

  6. # 以 例如 '月 日' 形式显示日期
  7. df['日期'] = df['日期'].dt.strftime('%m月%d日')

  8. print(df)
复制代码


注意:
- `origin='1899-12-30'` 是因为 Excel 将 1899-12-30 视为日期序列的起始。
- `.dt.strftime()` 用于格式化日期显示,你可以根据需要调整日期的显示格式。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2024-11-15 10:34:06 | 显示全部楼层
FishC 发表于 2024-11-15 10:30
要在 Pandas 中保留 DataFrame 的前 10 行数据,可以使用 `iloc` 方法。这样会创建一个只包含前 10 行的新  ...

原始excel里面的  日期  列  显示  xx月xx日
用df=pd.read_excel("1234.xlsx")  导入df 后  日期变成一个int数据  如何恢复日期显示
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-11-15 10:37:41 | 显示全部楼层
FishC 发表于 2024-11-15 10:34
在导入 Excel 文件后,如果日期列显示为整数,你可以将这些整数转换为正确的日期格式。通常,Excel 中 ...

现在  df.日期  是这个样子的数据
>>> df.日期
0    2024-11-05
1    2024-11-06
2           NaT
3           NaT
4    2024-11-08
5    2024-11-05
6    2024-11-08
7           NaT
8           NaT
9    2024-11-07
10   2024-11-09
11   2024-11-11
12          NaT
13   2024-11-12
14          NaT
15   2024-11-08
16          NaT
17          NaT
18          NaT
Name: 日期, dtype: datetime64[ns]
>>>
现在我们要填充数据  确保每个nat 都被填充为距离它最近的日期
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-11-15 10:41:38 | 显示全部楼层
FishC 发表于 2024-11-15 10:38
要填充 `NaT` 值为距离它最近的日期,可以使用 Pandas 的 `fillna` 方法,并指定使用前后值进行填充。 ...

虽然填充成功了,但是 却是一个废弃的方法   如何修改成新方法
>>> df['日期'] = df['日期'].fillna(method='ffill').fillna(method='bfill')
<stdin>:1: FutureWarning: Series.fillna with 'method' is deprecated and will raise in a future version. Use obj.ffill() or obj.bfill() instead.
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-11-15 13:16:28 | 显示全部楼层
FishC 发表于 2024-11-15 10:41
要避免 `fillna` 方法的弃用警告,你可以直接使用 `ffill` 和 `bfill` 方法来填充 `NaT`。以下是更新后 ...

继续这个问题,以日期+单位 分组 金额 求和  如何写groupby
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-11-15 13:57:42 | 显示全部楼层
FishC 发表于 2024-11-15 13:22
要将数据按日期和单位分组并求和金额,你可以使用 Pandas 中的 `groupby` 方法。假设 DataFrame 中的列 ...

>>> df=pd.read_excel("5.xlsx",header=None)
>>> df
         0
0     3568
1    34579
2    45689
3    23459
4     4568
..     ...
247   1358
248  34589
249  12348
250  13468
251  13569
这个在导入数据时,原本的文本型数据 被pandas自动识别为int类型
所以 导致数据的前导0 都消失了   如何修正
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-11-15 13:59:12 | 显示全部楼层
FishC 发表于 2024-11-15 13:57
在读取 Excel 文件时,如果希望保持数据的文本格式(包括保留前导零),可以使用 `dtype` 参数进行控制 ...

那么  如果不是一列数据  有的列是文本  有的列是数值  呢  如何设置
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-11-15 14:02:42 | 显示全部楼层
FishC 发表于 2024-11-15 13:59
如果你的数据包含多个列,并且希望为特定列设置数据类型(例如,有的列保留为文本,有的列为数值),你 ...


现在有这样一组数据
>>> df
         0
0    03568
1    34579
2    45689
3    23459
4    04568
..     ...
247  01358
248  34589
249  12348
250  13468
251  13569
总共有252个数据,要求把他们分成42组  每组6个数据   要求这6个数据连接在一起  正好包含3个0 3个1
3个2 3个3  3个4....3个8  3个9
可有可能实现吗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-11-15 14:04:27 | 显示全部楼层
FishC 发表于 2024-11-15 14:02
根据你的描述,想要将252个数据分成42组,每组包含6个数据,并且每组要满足包含3个0、3个1、3个2……3 ...

每个数据的长度是5  包含5个不同数字   再乘以6组  正好是30个字符
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-11-15 14:45:48 | 显示全部楼层
FishC 发表于 2024-11-15 14:04
好的,明白了你的需求:你有 252 个长度为 5 的字符串,每个字符串包含 5 个不同的数字,你希望这些字 ...

对df 进行升降序排序 获取新df1 df2  该如何写代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-11-15 14:58:26 | 显示全部楼层
FishC 发表于 2024-11-15 14:51
要对 DataFrame 的列进行升序和降序排序并获取两个新 DataFrame,你可以使用 Pandas 的 `sort_values`  ...

现在的需求修正为

import pandas as pd

df = pd.read_excel('5.xlsx',header=None)
# 对于升序排序
df1 = df.sort_values(by=0, ascending=True).reset_index(drop=True)

# 对于降序排序
df2 = df.sort_values(by=0, ascending=False).reset_index(drop=True)
outls=[]
outls.append(df1的1--3,df2的1--3)
outls.append(df1的4--6,df2的4--6)
outls.append(df1的7--9,df2的7--9)
.......
.......
.......
总共追加42次 结束
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-11-15 15:05:06 | 显示全部楼层
FishC 发表于 2024-11-15 14:58
要实现这个功能,你可以创建一个新的列表 `outls`,然后按照需求从两个排序后的 DataFrame 中提取特定 ...

如果我只想要数据呢   不想要组(group)  
group = pd.concat([df1.iloc[start_idx:start_idx+3], df2.iloc[start_idx:start_idx+3]])
    # 将结果组合转为列表并加入到 outls
    outls.append(group)
结果中 不想包含index 也不想包含字段名
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-11-15 15:10:36 | 显示全部楼层
FishC 发表于 2024-11-15 15:05
如果你只想要数据,而不需要索引或字段名,可以在将数据添加到 `outls` 前,将其转换为 NumPy 数组或直 ...

dtype=object), array    这些东西 也不想要呢
只是单纯的数据   每6个数据构成一个元组   42个元组 构成一个列表  即最终结果
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-11-18 12:48:30 | 显示全部楼层
FishC 发表于 2024-11-15 15:10
好的,你希望每6个数据构成一个元组,然后这些元组构成一个列表。这样处理时,可以使用 `.tolist()` 方 ...

>>> df
          客户单号      客户发货时间                                   收货地址    总件数   重量(T)     体积
0   8003723699  2024-09-22                    广东省佛山市高明区更合镇合塘路184号   80.0   2.000   4.00
1   8003723705  2024-09-23                              朱村大道中491号   80.0   2.000   4.00
2   8003723710  2024-09-23                     广东省惠州市博罗县麻陂镇大马路80号   80.0   0.100   4.00
3   8003723710  2024-09-23                     广东省惠州市博罗县麻陂镇大马路80号   80.0   0.100   4.00
4   8003726275  2024-09-22                    广东省广州市南沙区榄核镇大坳村工业B区  200.0   5.000  10.00
5   8003726279  2024-09-22                      广东省佛山市高明区更合镇金腾路1号   80.0   2.000   4.00
6   8003727727  2024-09-26                   广东省惠州市惠阳区大亚湾澳头荃湾综合港区  400.0  10.000  20.00
7   8003744009  2024-09-19                     广东省广州市白云区鸦岗金沙围路11号   25.0   0.500   1.00
8   8003744010  2024-09-20                 广东省东莞市麻涌镇麻涌镇新沙工业区海力饲料厂  150.0   3.000   6.00
9   8003744010  2024-09-20                 广东省东莞市麻涌镇麻涌镇新沙工业区海力饲料厂  150.0   0.100   6.00
10  8003746232  2024-09-23                     广东省佛山市高明区荷城街道三洲兴盛路  200.0   5.000  10.00
11  8003747613  2024-09-20                    广东省佛山市高明区更合镇合塘路184号  408.0   0.010  20.40
12  8003746113  2024-09-22                    广东省广州市南沙区榄核镇大坳村工业B区  400.0  10.000  20.00
13  8003747611  2024-09-20                      广东省江门市开平市金鸡镇文乐街1号  320.0   8.000  16.00
14  8003747612  2024-09-20                    广东省佛山市高明区更合镇合塘路184号   32.0   0.800   1.60
15  8003747590  2024-09-21                      广东省云浮市新兴县车岗镇工业开发区  100.0   2.000   4.00
16  8003746233  2024-09-20                  广东省广州市黄埔区横沙白街172号101房   50.0   1.000   2.00
17  8003746432  2024-09-23  广东省江门市蓬江区杜阮镇怡景大道振林饲料有限公司&#160;江门&#160;Guangdong  160.0   4.000   8.00
18  8003748235  2024-09-22                 广东省云浮市新兴县东成镇十里工业区联营饲料厂  800.0  20.000  40.00
19  8003748242  2024-09-22                     广东省云浮市郁南县大湾镇小桥头工业区  720.0  18.000  36.00
20  8003748240  2024-09-22                      广东省云浮市新兴县车岗镇工业开发区  200.0   5.000  10.00
21  8003748238  2024-09-22                         广东省云浮市新兴县勒竹镇榄根  400.0  10.000  20.00
22  8003748236  2024-09-22           广东省佛山市高明区更合镇高明温氏饲料厂Guangdong  600.0  15.000  30.00
23  8003748237  2024-09-22                      广东省云浮市新兴县稔村镇白土开发区  360.0   9.000  18.00
24  8003748241  2024-09-22                   广东省佛山市三水区南山镇六和镇城东路1号  640.0  16.000  32.00

已知以上数据,现在需求:
要求把收货地址中包含    东莞  或者惠州  或者佛山 的  并且日期一致的  记录合并  重量字段求和
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-11-18 12:53:59 | 显示全部楼层
FishC 发表于 2024-11-18 12:48
要将包含特定关键字的收货地址合并,并对同一天的重量进行求和,你可以使用 Pandas 的 `groupby` 和 `a ...

其他的数据也是需要的,正常按照日期分组 然后追加到这个结果当中
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-11-19 14:05:18 | 显示全部楼层
FishC 发表于 2024-11-18 12:55
如果需要保留其他数据,并按照日期分组,然后为一个含有特定地址的组合数据追加其他数据,可以通过 Pan ...

现在有这样一组数据
ADAKLDJ
DKJLAKSDJKA
SDJKLSAJKLAJD
SDJKLSDJDKLSA
DKLSDAJF;SASDL
AJDKL;DSAJKLAJ
DJFKLAJDFKLSA
FDSJKLFJSADLKDJFA
SDJFKLSDAJFKLSA
DJFKLSDADFJKLASDF
AJDKFJSADKFA
SDJFKSAJDFKLAS
DFJKSLAJDFKLA
DFSKALJSDFKLDFJPDFO
;SDJFJALSDKJF
ADJIIPQEURFLIAJSD'FJSADKL
QDFJALKJDFKL'Q
WEJKF

要求使用pandas 对每一行进行单独排序
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-10-5 02:59

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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