小编Dre*_*ead的帖子

Python Pandas - 选择等于的数据帧列

什么是Pandas相当于这个SQL代码?

Select id, fname, lname from table where id = 123
Run Code Online (Sandbox Code Playgroud)

我知道这相当于Pandas中的SQL'where'子句:

df[df['id']==123]
Run Code Online (Sandbox Code Playgroud)

这会选择特定的列:

df[['id','fname','lname']]
Run Code Online (Sandbox Code Playgroud)

但我无法弄清楚如何将它们结合起来.我在网上看到的所有例子都选择了有条件的所有列.我想选择具有一个或多个条件的有限数量的列.

python pandas

7
推荐指数
1
解决办法
6269
查看次数

熊猫 - df.columns 被截断

df.columns 的输出被截断。

>>> df.columns
Run Code Online (Sandbox Code Playgroud)

输出

索引(['列1','列2','列3','列4','列5','列6','列7','列8','列9','列10',

...

'column294','column295','column296','column297','column298','column299','column300','column301','column302','column303'],dtype='object',长度=303 )

示例数据框有 303 个列名。是否有一个 pandas 设置可以让我查看所有列名称?

我尝试更改最大行数和列数,但事实并非如此。我尝试过的设置更改示例:

pd.options.display.max_rows=200
pd.options.display.max_columns=200
Run Code Online (Sandbox Code Playgroud)

python pandas

5
推荐指数
1
解决办法
3244
查看次数

使用 Python 将值列表传递给 Oracle

我试图定义一个值列表(id 号)并将它们传递给查询 Oracle 表的 SQL。

只要我只包含一个 id,这段代码就可以工作。

named_params = {'ids':'123456548'}
query = """
select PEBEMPL_ECLS_CODE 
from PEBEMPL
inner join SPRIDEN on spriden_pidm = pebempl_pidm 
where SPRIDEN_CHANGE_IND is null
and SPRIDEN_ID in :ids
"""
df = pd.read_sql(query, connection, params=named_params)
Run Code Online (Sandbox Code Playgroud)

执行相同操作但传递 id 列表的正确语法是什么?

例如,此代码不起作用:

idlist = ['123456548','546465464']
named_params = {'ids':idlist}
query = """
select PEBEMPL_ECLS_CODE 
from PEBEMPL
inner join SPRIDEN on spriden_pidm = pebempl_pidm 
where SPRIDEN_CHANGE_IND is null
and SPRIDEN_ID in :ids
"""
df = pd.read_sql(query, connection, params=named_params)
Run Code Online (Sandbox Code Playgroud)

返回错误:

': ORA-01484: arrays …
Run Code Online (Sandbox Code Playgroud)

python oracle

5
推荐指数
1
解决办法
7076
查看次数

用最大值加1替换nan

我有一个看起来像这样的数据框:

在此处输入图片说明

我想通过从该年的最大值继续填充NaN(即,基于每年的最大值逐渐增加)。

这是我要实现的目标:

在此处输入图片说明

我知道如何分别对每年应用这样的方法的唯一方法是,在for循环中为每年创建单独的数据帧,然后将它们重新附加在一起。

#data
d = {'year': {0: 2016,
  1: 2016,
  2: 2016,
  3: 2016,
  4: 2017,
  5: 2017,
  6: 2017,
  7: 2017,
  8: 2018,
  9: 2018,
  10: 2018},
 'id': {0: 1015.0,
  1: 1016.0,
  2: nan,
  3: nan,
  4: 1035.0,
  5: 1036.0,
  6: nan,
  7: nan,
  8: 1005.0,
  9: nan,
  10: nan}}

# list of years
years = [2016,2017,2018]

# create dataframe    
df = pd.DataFrame(d)

# create list that I will append data frames too
l = []

for …
Run Code Online (Sandbox Code Playgroud)

python

5
推荐指数
1
解决办法
60
查看次数

如何使用 pathlib 规范化相对路径

我正在尝试在 Python 中使用相对路径,并且我想将我的 csv 文件放在与我的 Python 代码不同的文件夹中。

我的python程序位于以下文件夹中:

G:\projects\code
Run Code Online (Sandbox Code Playgroud)

我想阅读这个上一级的文件:

G:\projects\data\sales.csv
Run Code Online (Sandbox Code Playgroud)

如何使用当前工作文件夹高一级的pathlib指定路径?我不想更改当前的工作文件夹。

我试过这个:

from pathlib import Path
file = Path.cwd() /'..'/'data'/'sales.csv'
Run Code Online (Sandbox Code Playgroud)

但现在“文件”变量等于:

'G:/projects/code/../data/sales.csv'
Run Code Online (Sandbox Code Playgroud)

我通读了文档,要么那里没有解释,要么我只是想念它。

python python-3.x pathlib

5
推荐指数
1
解决办法
4200
查看次数

Python - 从字符串中删除十进制和零

我正在将几个电子表格读入数据框,并且有一个ID字段,在某些电子表格中是字符串,在其他电子表格中是数字.我已经把它转换成了一个字符串,这是我需要的数据类型,但我最终会得到一些最后有".0"的ID.如何删除小数和零?

示例:ID号805096730.0应为805096730

python pandas

4
推荐指数
1
解决办法
5864
查看次数

python - 从完整地址获取邮政编码

我有一个数据框,其中一列中有完整地址,我需要创建一个仅包含邮政编码的单独列。有些地址只有五位数字的邮政编码,而其他地址则有额外的四位数字。

如何拆分列以获取邮政编码?

示例数据

d = {'name':['bob','john'],'address':['123 6th Street,Sterling VA 20165-7513','567 7th Street, Wilmington NC 28411']}
df = pd.DataFrame(d)
Run Code Online (Sandbox Code Playgroud)

我尝试使用 rpartition 但我得到了邮政编码之前的所有内容:

df['test'] = df['address'].str.rpartition(" ")
print(df)
name    address                                test
bob     123 6th Street,Sterling VA 20165-7513  123 6th Street,Sterling VA
john    567 7th Street, Wilmington NC 28411    567 7th Street, Wilmington NC
Run Code Online (Sandbox Code Playgroud)

这就是我想要得到的:

name    address                                zipcode
bob     123 6th Street,Sterling VA 20165-7513  20165-7513
john    567 7th Street, Wilmington NC 28411    28411
Run Code Online (Sandbox Code Playgroud)

python dataframe pandas

4
推荐指数
1
解决办法
7383
查看次数

更改列表中列的大小写

如何更改列表中数据框列的大小写?我知道如何使所有列大写,但我不知道如何仅使特定列大写。

d = {'name':['bob','john','sue'],'id':[545,689,143],'fte':[1,.5,.75]}
df = pd.DataFrame(d)
# list of columns I want to make upper case
cols = ['id','fte']
Run Code Online (Sandbox Code Playgroud)

这什么也没做(没有错误,大小写没有改变):

df[cols].rename(str.upper,axis=1,inplace=True)
df


    name    id  fte
0   bob     545     1.00
1   john    689     0.50
2   sue     143     0.75
Run Code Online (Sandbox Code Playgroud)

python pandas

2
推荐指数
1
解决办法
57
查看次数

将dataframe列与字符串和数字进行比较

我有一个包含两列有字符串和数字的数据框.当我比较两列时,即使它们看起来是相同的,它们也不匹配.

示例数据:

old_code     new_code
100000       100000
Run Code Online (Sandbox Code Playgroud)

当我比较时,结果是错误的:

df['old_code'] == df['new_code']
0    False
dtype: bool
Run Code Online (Sandbox Code Playgroud)

数据类型相同:

df.dtypes
old_code    object
new_code    object
dtype: object
Run Code Online (Sandbox Code Playgroud)

我尝试剥离列,以防有空格但它们仍然不匹配:

df['old_code'].str.strip() == df['new_code'].str.strip() 
0    False
dtype: bool
Run Code Online (Sandbox Code Playgroud)

我把数据帧放到字典中,看看是否能发现任何错误,我注意到由于某种原因,其中一列被格式化为字符串,另一列被格式化为整数:

d = df.to_dict()
d
{'old_code': {0: '100000'}, 'new_code': {0: 100000}}
Run Code Online (Sandbox Code Playgroud)

有关如何比较这些列的任何建议?我不想将数据类型更改为整数,因为有些行是真正的字符串.

python pandas

1
推荐指数
1
解决办法
751
查看次数

标签 统计

python ×9

pandas ×6

dataframe ×1

oracle ×1

pathlib ×1

python-3.x ×1