给出下面的热图:
flights = sns.load_dataset("flights")
flights = flights.pivot("month", "year", "passengers")
ax = sns.heatmap(flights, annot=True, fmt="d")
for text in ax.texts:
text.set_size(14)
if text.get_text() == '118':
text.set_size(18)
text.set_weight('bold')
text.set_style('italic')
Run Code Online (Sandbox Code Playgroud)
如何将类似的逻辑应用于 y 轴刻度标签?例如,如果我想加粗“February”,将其设为 13 号字体,并将其涂成红色,该怎么办?
提前致谢!
给定以下数据框:
import pandas as pd
df = pd.DataFrame(
{'A':[10,20,30,40,50,60],
'B':[1,2,1,4,5,4]
})
df
A B
0 10 1
1 20 2
2 30 1
3 40 4
4 50 5
5 60 4
Run Code Online (Sandbox Code Playgroud)
我希望新列“C”的值等于“A”中的值,其中“B”的相应值小于 3,否则为 0。所需的结果如下:
A B C
0 10 1 10
1 20 2 20
2 30 1 30
3 40 4 0
4 50 5 0
5 60 4 0
Run Code Online (Sandbox Code Playgroud)
提前致谢!
鉴于下表:
import matplotlib.pyplot as plt
table=plt.table(cellText=[' ', ' ', ' ', ' ', ' '], # rows of data values
rowLabels=['1','2','3','4','5'],
cellLoc="left",
rowLoc='left',
bbox=[0,0,.2,1], # [left,bottom,width,height]
edges="")
Run Code Online (Sandbox Code Playgroud)
我想将数字 (1-5) 的颜色更改为灰色,将字体大小更改为 12 磅。
鉴于以下列表:
a = [0, 5, 1]
b = [1, 2, 1]
Run Code Online (Sandbox Code Playgroud)
我想用[b]中相应位置的数字重复[a]的每个元素来产生这个:
[0, 5, 5, 1]
Run Code Online (Sandbox Code Playgroud)
即0发生1次,5发生2次,1发生1次.
给出以下数据框:
import pandas as pd
d=pd.DataFrame({'label':[1,2,2,2,3,4,4],
'values':[3,5,7,2,5,8,3]})
d
label values
0 1 3
1 2 5
2 2 7
3 2 2
4 3 5
5 4 8
6 4 3
Run Code Online (Sandbox Code Playgroud)
我知道如何计算这样的唯一值:
d['dup']=d.groupby('label')['label'].transform('count')
Run Code Online (Sandbox Code Playgroud)
结果如下:
label values dup
0 1 3 1
1 2 5 3
2 2 7 3
3 2 2 3
4 3 5 1
5 4 8 2
6 4 3 2
Run Code Online (Sandbox Code Playgroud)
但我想要的是一个具有以下值的列:
1
如果1 unique
每个标签列都有行,2
如果有,并且有duplicates
问题的行是first
这样0
的行,并且该行是duplicate …
我无法弄清楚如何在刻度标签中显示美元符号,这些标签不是数字,而是字符串.
这是我的意思的一个例子:
import matplotlib.pyplot as plt
import numpy as np
categories = ['$0-$10','$10-$20','$20-$30']
y_pos = np.arange(len(categories))
data = 3 + 10 * np.random.rand(len(categories))
plt.barh(y_pos, data, align='center', alpha=0.4)
plt.yticks(y_pos, categories)
plt.show()
Run Code Online (Sandbox Code Playgroud)
产量:
我试过这个,它有数千美元:
fmt = '${x:,.0f}'
tick = mtick.StrMethodFormatter(fmt)
plt.yaxis.set_major_formatter(tick)
Run Code Online (Sandbox Code Playgroud)
...但没有像我这里的字符串那样的运气.
给出以下数据框架:
d1=pd.DataFrame({'A':[1,2,np.nan],'B':[np.nan,5,6]})
d1.index=['A','B','E']
A B
A 1.0 NaN
B 2.0 5.0
E NaN 6.0
d2=pd.DataFrame({'A':[4,2,np.nan,4],'B':[4,2,np.nan,4]})
d2.index=['A','B','C','D']
A B
A 4.0 4.0
B 2.0 2.0
C NaN NaN
D 4.0 4.0
Run Code Online (Sandbox Code Playgroud)
我想比较它们以找到每个相应行中的最低值,同时保留两个行中的所有行索引.这是我正在寻找的结果:
A B
A 1.0 4.0
B 2.0 2.0
C NaN NaN
D 4.0 4.0
E NaN 6.0
Run Code Online (Sandbox Code Playgroud)
提前致谢!
给定以下数据框: import pandas as pd
d = pd.DataFrame({'a':[1,2,3],'b':[np.nan,5,6]})
d
a b
0 1 NaN
1 2 5.0
2 3 6.0
Run Code Online (Sandbox Code Playgroud)
对于值为“NaN”的任何列,我想用列名替换该值。我的真实数据有很多列。
想要的结果:
a b
0 1 b
1 2 5.0
2 3 6.0
Run Code Online (Sandbox Code Playgroud)
提前致谢!
更新:
我在这里看到了一些指导,但是当我使用下面的代码将熊猫中的数据插入Oracle时,我似乎无法弄清楚如何指定列类型。例如,一列是日期,但是在导入时,它会转换为字符串。
另外,如果我希望Oracle数据库中的列名稍有不同,是否需要先通过pandas重命名列,然后通过to_sql将其发送给Oracle?
import pandas as pd
from sqlalchemy import create_engine
import cx_Oracle as cx
pwd=input('Enter Password for server:')
engine = create_engine('oracle+cx_oracle://schema:'+pwd+'@server:1521/service_name')
df=pd.read_csv(r'path\data.csv',encoding='latin-1',index_col=0)
name='table1'
df.to_sql(name,engine,if_exists='append')
Run Code Online (Sandbox Code Playgroud) 使用熊猫 18.1...
我正在尝试遍历 CSV 文件夹来读取每个 CSV 并将其发送到 Oracle 数据库表。我的众多 CSV 之一中潜伏着一个非 ASCII 字符(更像是陶醉在我的痛苦中)。我不断收到此错误:
UnicodeEncodeError: 'ascii' codec can't encode character '\xab' in position 8:
ordinal not in range(128)
Run Code Online (Sandbox Code Playgroud)
这是代码:
import pandas as pd
import pandas.io.sql as psql
from sqlalchemy import create_engine
import cx_Oracle as cx
engine = create_engine('oracle+cx_oracle://schema:'+pwd+'@server:port/service_name'
,encoding='latin1')
name='table'
path=r'path_to_folder'
filelist = os.listdir(path)
for file in filelist:
df = pd.read_csv(pathc+'\\'+file,encoding='latin1',index_col=0)
df=df.astype('unicode')
df['date'] = pd.to_datetime(df['date'])
df['date'] = pd.to_datetime(df['Contract_EffDt'],format='%YYYY-%mm-%dd')
df.to_sql(name, engine, if_exists = 'append')
Run Code Online (Sandbox Code Playgroud)
我尝试过以下方法:
python-3.x ×7
python ×6
pandas ×5
matplotlib ×2
oracle ×2
sqlalchemy ×2
compare ×1
dataframe ×1
dollar-sign ×1
duplicates ×1
format ×1
labels ×1
min ×1
repeat ×1
seaborn ×1
unique ×1