python - 基于 lengt 函数从 df 内的数组中检索值
问题描述
如何从数据框中的数组中检索前 n 个值,
其中 n 是同一个数组的长度 - 1: (len[array] - 1)?
为了澄清我的目标是我到目前为止的代码,来自我的 jupyter 笔记本:
import numpy as np
import pandas as pd
#load csv into pandas data frame
df1 = pd.read_csv(r"accounts.csv")
#define the range for clarity
xi = 60
xn = 70
df1['splt_acc'] = df1.Account.str.split('.')
df1['len'] = df1.splt_acc.apply(lambda x: len(x)-1).astype(int)
df1['parent'] = df1.splt_acc.str.join('.')
pd.DataFrame(df1)[xi:xn]
显示以下
Account Rubriek splt_acc len parent
60 9.5 Inkoop [9, 5] 1 9.5
61 9.6 Overige res.. [9, 6] 1 9.6
62 9.7 Buitengewon.. [9, 7] 1 9.7
63 9.8 Incidentele.. [9, 8] 1 9.8
64 9.9 Vennootschap. [9, 9] 1 9.9
65 0.0.0 Terreinen [0, 0, 0] 2 0.0.0
66 0.0.1 Gebouwen [0, 0, 1] 2 0.0.1
67 0.0.2 Verbouwingen [0, 0, 2] 2 0.0.2
68 0.0.3 Machines [0, 0, 3] 2 0.0.3
69 0.0.4 Gereedschappen[0, 0, 4] 2 0.0.4
接下来我想要的是:
df1['y'] = df1.splt_acc.apply(lambda splt_acc: splt_acc[0:df1.len])
pd.DataFrame(df1)[xi:xn]
这会导致以下错误:切片索引必须是整数或无或具有索引方法
使用更简单的方法,我可以获得每行的结果,在本例中为第 60 行:
account = df1['Account'][60]
x = account.split('.')
if len(x) - 1 == 0:
y = 'null'
else:
y = x[0:(len(x)-1)]
print(y)
['9']
if y == 'null':
parent = 'null'
else:
parent = ".".join(str(x) for x in y)
print(parent)
9
但问题是,我怎样才能在我的 DataFrame 中得到相同的结果?
解决方案
你想做的是,
df1['y'] = df1.splt_acc.apply(lambda x: x[:-1])
这意味着您正在获取从 0 到倒数第二个值的所有值。例如,
a = [5,3,6,4]
然后,a[:-1] returns [5,3,6]
此外,您可以在开始时执行此操作,
df1['y'] = df1.Account.str.split('.')[:-1]
推荐阅读
- curl - 使用 curl 将不记名授权标头传递给 AWS 函数
- reactjs - 尽管 TypeScript 编译器错误,为什么我的 React Native 应用程序构建成功?
- sql - 在 where 子句中使用这个子查询的语法问题是什么
- c - 如何将格式化数据添加到 printf() 调用
- java - 'Dcoder' 练习失败的测试用例
- python - 如何在谷歌应用脚本中更新 mailgun 路由
- php - “无法读取数据,因为它的格式不正确” IOS 使用 swift 和 MySQL 数据库的登录系统
- ansible - 在 k8s_facts 模块上没有观察到输出
- xslt - Report_Entry(worker) 的第一行需要默认为“YES”。工人返回“NO”的所有其他行
- c - 我怎样才能继续为某个点添加某个值?