什么是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)
但我无法弄清楚如何将它们结合起来.我在网上看到的所有例子都选择了有条件的所有列.我想选择具有一个或多个条件的有限数量的列.
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) 我试图定义一个值列表(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) 我有一个看起来像这样的数据框:
我想通过从该年的最大值继续填充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 中使用相对路径,并且我想将我的 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)
我通读了文档,要么那里没有解释,要么我只是想念它。
我正在将几个电子表格读入数据框,并且有一个ID字段,在某些电子表格中是字符串,在其他电子表格中是数字.我已经把它转换成了一个字符串,这是我需要的数据类型,但我最终会得到一些最后有".0"的ID.如何删除小数和零?
示例:ID号805096730.0应为805096730
我有一个数据框,其中一列中有完整地址,我需要创建一个仅包含邮政编码的单独列。有些地址只有五位数字的邮政编码,而其他地址则有额外的四位数字。
如何拆分列以获取邮政编码?
示例数据
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) 如何更改列表中数据框列的大小写?我知道如何使所有列大写,但我不知道如何仅使特定列大写。
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) 我有一个包含两列有字符串和数字的数据框.当我比较两列时,即使它们看起来是相同的,它们也不匹配.
示例数据:
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)
有关如何比较这些列的任何建议?我不想将数据类型更改为整数,因为有些行是真正的字符串.