在本文中,我们将详细介绍Python-从pandas.DataFrame使用复杂条件选择的各个方面,并为您提供关于pandasdataframe选择列的相关解答,同时,我们也将为您带来关于Pandas
在本文中,我们将详细介绍Python-从pandas.DataFrame使用复杂条件选择的各个方面,并为您提供关于pandas dataframe选择列的相关解答,同时,我们也将为您带来关于Pandas DataFrame使用另一个DataFrame列过滤行、Python Pandas -- DataFrame、Python pandas dataframe、Python pandas Dataframe 列到行操作的有用知识。
本文目录一览:- Python-从pandas.DataFrame使用复杂条件选择(pandas dataframe选择列)
- Pandas DataFrame使用另一个DataFrame列过滤行
- Python Pandas -- DataFrame
- Python pandas dataframe
- Python pandas Dataframe 列到行操作
Python-从pandas.DataFrame使用复杂条件选择(pandas dataframe选择列)
例如,我有简单的DF:
import pandas as pdfrom random import randintdf = pd.DataFrame({''A'': [randint(1, 9) for x in xrange(10)], ''B'': [randint(1, 9)*10 for x in xrange(10)], ''C'': [randint(1, 9)*100 for x in xrange(10)]})
我可以使用熊猫的方法和惯用法从“ A”
中选择与B对应的值大于50的值,对于C
对应的值大于900的值吗?
答案1
小编典典当然!设定:
>>> import pandas as pd>>> from random import randint>>> df = pd.DataFrame({''A'': [randint(1, 9) for x in range(10)], ''B'': [randint(1, 9)*10 for x in range(10)], ''C'': [randint(1, 9)*100 for x in range(10)]})>>> df A B C0 9 40 3001 9 70 7002 5 70 9003 8 80 9004 7 50 2005 9 30 9006 2 80 7007 2 80 4008 5 80 3009 7 70 800
我们可以应用列操作并获取布尔系列对象:
>>> df["B"] > 500 False1 True2 True3 True4 False5 False6 True7 True8 True9 TrueName: B>>> (df["B"] > 50) & (df["C"] == 900)0 False1 False2 True3 True4 False5 False6 False7 False8 False9 False
[更新,切换到新样式.loc]:
然后,我们可以使用它们来索引对象。对于读取访问,可以链接索引:
>>> df["A"][(df["B"] > 50) & (df["C"] == 900)]2 53 8Name: A, dtype: int64
但是由于视图和执行写操作的副本之间的差异,您可能会遇到麻烦。您可以.loc改用:
>>> df.loc[(df["B"] > 50) & (df["C"] == 900), "A"]2 53 8Name: A, dtype: int64>>> df.loc[(df["B"] > 50) & (df["C"] == 900), "A"].valuesarray([5, 8], dtype=int64)>>> df.loc[(df["B"] > 50) & (df["C"] == 900), "A"] *= 1000>>> df A B C0 9 40 3001 9 70 7002 5000 70 9003 8000 80 9004 7 50 2005 9 30 9006 2 80 7007 2 80 4008 5 80 3009 7 70 800
请注意,我不小心输入了== 900not != 900和或~(df[“C”] == 900),但我懒得修复它。为读者练习。:^)
Pandas DataFrame使用另一个DataFrame列过滤行
我会做merge
out = df1.merge(df2[['col1','col2']],on = 'col1',suffixes = ('','1')).query('col3>=col21').drop('col21',1)
out
Out[15]:
col1 col2 col3 col4
1 A 2 0.80 200
2 A 2 0.90 300
3 A 3 0.95 400
4 A 3 0.85 500
5 B 2 0.65 600
6 B 2 0.75 700
9 B 3 0.75 1000
或reindex
out = df1[df1['col3'] >= df2.set_index('col1')['col2'].reindex(df1['col1']).values]
Out[19]:
col1 col2 col3 col4
1 A 2 0.80 200
2 A 2 0.90 300
3 A 3 0.95 400
4 A 3 0.85 500
5 B 2 0.65 600
6 B 2 0.75 700
9 B 3 0.75 1000
您还可以使用map
:
df1.loc[df1.col3 >= df1.col1.map(df2.set_index("col1").col2)]
,
我的方法类似于@Ben_Yo的合并答案,但是代码更多,但也许更直接。
您只需:
- 合并该列并创建新的数据框
ZStack{ Rectangle() .frame(width: geometry.size.width,height: geometry.size.height/3.25) .shadow(radius: 5) .foregroundColor(Color.white) //Words ontop of the Rectangle VStack { HStack { Spacer() Text("Hello World") }.padding(.trailing,40) Spacer() //<-- PROBLEM HERE }//.offset(y: -40) }
- 根据条件(在本例中为
s
),将数据名人 - 最后,将
s['col3'] >= s['col2']
传递给s
,结果将排除布尔系列df1
中返回False
的行:
s
更改为返回True
或False
的布尔系列。
s
Python Pandas -- DataFrame
pandas.DataFrame
-
class
pandas.
DataFrame
(data=None, index=None, columns=None, dtype=None, copy=False)[source] -
Two-dimensional size-mutable, potentially heterogeneous tabular data structure with labeled axes (rows and columns). Arithmetic operations align on both row and column labels. Can be thought of as a dict-like container for Series objects. The primary pandas data structure
Parameters: data : numpy ndarray (structured or homogeneous), dict, or DataFrame
Dict can contain Series, arrays, constants, or list-like objects
index : Index or array-like
Index to use for resulting frame. Will default to np.arange(n) if no indexing information part of input data and no index provided
columns : Index or array-like
Column labels to use for resulting frame. Will default to np.arange(n) if no column labels are provided
dtype : dtype, default None
Data type to force. Only a single dtype is allowed. If None, infer
copy : boolean, default False
Copy data from inputs. Only affects DataFrame / 2d ndarray input
See also
-
DataFrame.from_records
- constructor from tuples, also record arrays
-
DataFrame.from_dict
- from dicts of Series, arrays, or dicts
-
DataFrame.from_items
- from sequence of (key, value) pairs
pandas.read_csv
,pandas.read_table
,pandas.read_clipboard
1. 先来个小菜
基于dictionary创建
from pandas import Series, DataFrame import pandas as pd import numpy as np d = {''col1'':[1,2],''col2'':[3,4]} df = pd.DataFrame(data=d) print(df) print(df.dtypes) # col1 col2 #0 1 3 #1 2 4 #col1 int64 #col2 int64 #dtype: object
基于Numy的ndarrary
df2 = pd.DataFrame(np.random.randint(low=0, high=10, size=(5, 5)),columns=[''a'', ''b'', ''c'', ''d'', ''e'']) print (df2) # a b c d e #0 0 2 4 7 0 #1 6 7 3 4 1 #2 5 3 3 8 7 #3 0 9 4 3 4 #4 7 4 7 0 0
-
Python pandas dataframe
dataframe 列类型
df['客户id'] = df['客户id'].apply(pd.to_numeric)
df = pd.DataFrame(a, dtype='float') #示例1
df = pd.DataFrame(data=d, dtype=np.int8) #示例2
df = pd.read_csv("somefile.csv", dtype = {'column_name' : str})
df[['col2','col3']] = df[['col2','col3']].apply(pd.to_numeric)
df[['two', 'three']] = df[['two', 'three']].astype(float)
df.dtypes
type(mydata[0][0])
维度查看:df.shape
数据表基本信息(维度、列名称、数据格式、所占空间等):df.info()
每一列数据的格式:df.dtypes
某一列格式:df['B'].dtype
文件操作
DataFrame 数据的保存和读取
- df.to_csv 写入到 csv 文件
- pd.read_csv 读取 csv 文件
- df.to_json 写入到 json 文件
- pd.read_json 读取 json 文件
- df.to_html 写入到 html 文件
- pd.read_html 读取 html 文件
- df.to_excel 写入到 excel 文件
- pd.read_excel 读取 excel 文件
pandas.DataFrame.to_csv
将 DataFrame 写入到 csv 文件
DataFrame.to_csv(path_or_buf=None, sep=', ', na_rep='', float_format=None, columns=None, header=True, index=True,
index_label=None, mode='w', encoding=None, compression=None, quoting=None, quotechar='"',
line_terminator='\n', chunksize=None, tupleize_cols=None, date_format=None, doublequote=True,
escapechar=None, decimal='.')
参数:
path_or_buf : 文件路径,如果没有指定则将会直接返回字符串的 json
sep : 输出文件的字段分隔符,默认为 “,”
na_rep : 用于替换空数据的字符串,默认为''
float_format : 设置浮点数的格式(几位小数点)
columns : 要写的列
header : 是否保存列名,默认为 True ,保存
index : 是否保存索引,默认为 True ,保存
index_label : 索引的列标签名
条件筛选
单条件筛选
多条件筛选
索引筛选
切片操作
loc函数[行用序号,列用名称]
iloc函数[行用序号,列用序号]
使用方法同loc函数,但是不再输入列名,而是输入列的index: data.iloc[row_index,col_index]
ix函数
at函数
iat函数
df.set_index(
'month'
)
df.set_index([
'year'
,
'month'
])
DataFrame.columns = [newName]
df['Hour'] = pd.to_datetime(df['report_date'])
df.rename(index = str,column = new_names)
删除列:
#通过特征选取
data = data[['age']]
#通过del 关键字
del data['name']
#通过drop函数
data.drop(['name'],axis=1, inplace=True)
#通过pop
data.pop('name')
df = pd.read_csv(INPUTFILE, encoding = "utf-8")
df_bio = pd.read_csv(INPUTFILE, encoding = "utf-8", header=None) # header=None, header=0
显示前几行
df.head()
显示后几行
df.tail()
删除重复的数据
isDuplicated=df.duplicated() #判断重复数据记录
print(isDuplicated)
0 False
1 False
2 True
3 False
dtype: bool
#删除重复的数据
print(df.drop_duplicates()) #删除所有列值相同的记录,index为2的记录行被删除
col1 col2
0 a 3
1 b 2
3 c 2
print(df.drop_duplicates(['col1'])) #删除col1列值相同的记录,index为2的记录行被删除
col1 col2
0 a 3
1 b 2
3 c 2
print(df.drop_duplicates(['col2'])) #删除col2列值相同的记录,index为2和3的记录行被删除
col1 col2
0 a 3
1 b 2
print(df.drop_duplicates(['col1','col2'])) #删除指定列(col1和col2)值相同的记录,index为2的记录行被删除
col1 col2
0 a 3
1 b 2
3 c 2
df 某一列字母转大写小写
df['列名'] = df['列名'].str.upper()
df['列名'] = df['列名'].str.lower()
REF
https://www.cnblogs.com/aro7/p/9748202.html
https://www.cnblogs.com/hankleo/p/11462532.html
Python pandas Dataframe 列到行操作
如何解决Python pandas Dataframe 列到行操作?
我正在尝试转置几列,同时保留其他列。我在使用枢轴代码或转置代码时遇到了困难,因为它并没有真正给我我需要的输出。
有人可以帮忙吗?
我有这个数据框:
EmpID | 目标 | 第 1 周 | 第 2 周 | 第 3 周 | 第 4 周 |
---|---|---|---|---|---|
1 | 556 | 54 | 33 | 24 | 54 |
2 | 342 | 32 | 32 | 56 | 43 |
3 | 534 | 43 | 65 | 64 | 21 |
4 | 244 | 45 | 87 | 5 | 22 |
我预期的数据帧输出是:
EmpID | 目标 | 周 | 实际 |
---|---|---|---|
1 | 556 | 第 1 周 | 54 |
1 | 556 | 第 2 周 | 33 |
1 | 556 | 第 3 周 | 24 |
1 | 556 | 第 4 周 | 54 |
依此类推,直到列出完整的员工 ID..
解决方法
类似的东西。
# Python - melt DF
import pandas as pd
d = {''Country Code'': [1960,1961,1962,1963,1964,1965,1966],''ABW'': [2.615300,2.734390,2.678430,2.929920,2.963250,3.060540,4.349760],''AFG'': [0.249760,0.218480,0.210840,0.217240,0.211410,0.209910,0.671330],''ALB'': [''NaN'',''NaN'',1.12214]}
df = pd.DataFrame(data=d)
print(df)
df1 = (df.melt([''Country Code''],var_name=''Year'',value_name=''Econometric_Metric'')
.sort_values([''Country Code'',''Year''])
.reset_index(drop=True))
print(df1)
df2 = (df.set_index([''Country Code''])
.stack(dropna=False)
.reset_index(name=''Econometric_Metric'')
.rename(columns={''level_1'':''Year''}))
print(df2)
# BEFORE
ABW AFG ALB Country Code
0 2.61530 0.24976 NaN 1960
1 2.73439 0.21848 NaN 1961
2 2.67843 0.21084 NaN 1962
3 2.92992 0.21724 NaN 1963
4 2.96325 0.21141 NaN 1964
5 3.06054 0.20991 NaN 1965
6 4.34976 0.67133 1.12214 1966
# AFTER
Country Code Year Econometric_Metric
0 1960 ABW 2.6153
1 1960 AFG 0.24976
2 1960 ALB NaN
3 1961 ABW 2.73439
4 1961 AFG 0.21848
5 1961 ALB NaN
6 1962 ABW 2.67843
7 1962 AFG 0.21084
8 1962 ALB NaN
9 1963 ABW 2.92992
10 1963 AFG 0.21724
11 1963 ALB NaN
12 1964 ABW 2.96325
13 1964 AFG 0.21141
14 1964 ALB NaN
15 1965 ABW 3.06054
16 1965 AFG 0.20991
17 1965 ALB NaN
18 1966 ABW 4.34976
19 1966 AFG 0.67133
20 1966 ALB 1.12214
Country Code Year Econometric_Metric
0 1960 ABW 2.6153
1 1960 AFG 0.24976
2 1960 ALB NaN
3 1961 ABW 2.73439
4 1961 AFG 0.21848
5 1961 ALB NaN
6 1962 ABW 2.67843
7 1962 AFG 0.21084
8 1962 ALB NaN
9 1963 ABW 2.92992
10 1963 AFG 0.21724
11 1963 ALB NaN
12 1964 ABW 2.96325
13 1964 AFG 0.21141
14 1964 ALB NaN
15 1965 ABW 3.06054
16 1965 AFG 0.20991
17 1965 ALB NaN
18 1966 ABW 4.34976
19 1966 AFG 0.67133
20 1966 ALB 1.12214
另外,查看下面的链接,了解更多信息。
https://www.dataindependent.com/pandas/pandas-melt/
关于Python-从pandas.DataFrame使用复杂条件选择和pandas dataframe选择列的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于Pandas DataFrame使用另一个DataFrame列过滤行、Python Pandas -- DataFrame、Python pandas dataframe、Python pandas Dataframe 列到行操作的相关信息,请在本站寻找。
本文标签: