社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
私信  •  关注

unutbu

unutbu 最近创建的主题
unutbu 最近回复了
11 年前
回复了 unutbu 创建的主题 » Python-检查缩写的时区字符串是否有效[重复]

你可以列出所有可用的时区 pytz.all_timezones :

In [40]: import pytz
In [41]: pytz.all_timezones
Out[42]: 
['Africa/Abidjan',
 'Africa/Accra',
 'Africa/Addis_Ababa',
 ...]

还有 pytz.common_timezones :

In [45]: len(pytz.common_timezones)
Out[45]: 403

In [46]: len(pytz.all_timezones)
Out[46]: 563

一种情况下,它对 os.path.join('a', '/b') 归来 /b 如果你向用户索要文件名。

用户可以输入相对于当前目录的路径,也可以输入完整路径,您的程序可以这样处理这两种情况:

os.path.join(os.getcwd(), filename)

In [54]: os.getcwd()
Out[54]: '/tmp'

In [55]: os.path.join(os.getcwd(), 'foo')
Out[55]: '/tmp/foo'

In [56]: os.path.join(os.getcwd(), '/foo/bar')
Out[56]: '/foo/bar'

str.strip 为此:

In [1]: import string

In [4]: '123foo456'.strip(string.digits)
Out[4]: 'foo'

In [5]: '2foo1c#BAR'.strip(string.digits)
Out[5]: 'foo1c#BAR'

正如马特在评论中指出的(谢谢,马特),这只会删除数字。要删除任何非字母字符,

定义非字母的含义:

In [22]: allchars = string.maketrans('', '')

In [23]: nonletter = allchars.translate(allchars, string.letters)

然后脱掉衣服:

In [18]: '2foo1c#BAR'.strip(nonletter)
Out[18]: 'foo1c#BAR'
10 年前
回复了 unutbu 创建的主题 » Python帮助-设置x限制的间隔[duplicate]

您可以显式地设置要在其中打勾的标记 plt.xticks :

plt.xticks(np.arange(min(x), max(x)+1, 1.0))

例如,

import numpy as np
import matplotlib.pyplot as plt

x = [0,5,9,10,15]
y = [0,1,2,3,4]
plt.plot(x,y)
plt.xticks(np.arange(min(x), max(x)+1, 1.0))
plt.show()

np.arange 使用的而不是Python的 range 以防万一 min(x) max(x) 是浮点数而不是整数。)


plt.plot (或 ax.plot x y ax.get_xlim() 以发现Matplotlib已经设置了哪些限制。

start, end = ax.get_xlim()
ax.xaxis.set_ticks(np.arange(start, end, stepsize))

ax.xaxis.set_major_formatter(ticker.FormatStrFormatter('%0.1f'))

下面是一个可运行的示例:

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.ticker as ticker

x = [0,5,9,10,15]
y = [0,1,2,3,4]
fig, ax = plt.subplots()
ax.plot(x,y)
start, end = ax.get_xlim()
ax.xaxis.set_ticks(np.arange(start, end, 0.712123))
ax.xaxis.set_major_formatter(ticker.FormatStrFormatter('%0.1f'))
plt.show()
10 年前
回复了 unutbu 创建的主题 » 如何在pandas python中为字符串创建汇总列[duplicate]

你的问题有点模棱两可。至少有 两种解释:

  1. 钥匙在 di 参考索引值
  2. 钥匙在 参照 df['col1'] 价值观
  3. 钥匙在 参考索引位置(不是OP的问题,而是为了好玩而抛出的。)

以下是每种情况的解决方案。


案例1: 如果 是指索引值,然后可以使用 update 方法:

df['col1'].update(pd.Series(di))

例如,

import pandas as pd
import numpy as np

df = pd.DataFrame({'col1':['w', 10, 20],
                   'col2': ['a', 30, np.nan]},
                  index=[1,2,0])
#   col1 col2
# 1    w    a
# 2   10   30
# 0   20  NaN

di = {0: "A", 2: "B"}

# The value at the 0-index is mapped to 'A', the value at the 2-index is mapped to 'B'
df['col1'].update(pd.Series(di))
print(df)

产量

  col1 col2
1    w    a
2    B   30
0    A  NaN

我修改了你原帖中的值,这样就更清楚了 更新 正在做。 注意钥匙是如何进入的 与索引值关联。索引值的顺序——即,索引 位置 --没关系。


案例2: 如果钥匙在 参照 DF[COL1′] 值,然后@danallan和@dsm显示如何使用 replace :

import pandas as pd
import numpy as np

df = pd.DataFrame({'col1':['w', 10, 20],
                   'col2': ['a', 30, np.nan]},
                  index=[1,2,0])
print(df)
#   col1 col2
# 1    w    a
# 2   10   30
# 0   20  NaN

di = {10: "A", 20: "B"}

# The values 10 and 20 are replaced by 'A' and 'B'
df['col1'].replace(di, inplace=True)
print(df)

产量

  col1 col2
1    w    a
2    A   30
0    B  NaN

注意,在这种情况下,如何在 已更改为匹配 价值观 在里面 DF[COL1′] .


案例3: 如果钥匙在 参考索引位置,然后可以使用

df['col1'].put(di.keys(), di.values())

自从

df = pd.DataFrame({'col1':['w', 10, 20],
                   'col2': ['a', 30, np.nan]},
                  index=[1,2,0])
di = {0: "A", 2: "B"}

# The values at the 0 and 2 index locations are replaced by 'A' and 'B'
df['col1'].put(di.keys(), di.values())
print(df)

产量

  col1 col2
1    A    a
2   10   30
0    B  NaN

在这里,第一行和第三行被修改了,因为 0 2 ,它使用python基于0的索引引用第一个和第三个位置。

14 年前
回复了 unutbu 创建的主题 » 最令人沮丧的python黑客是什么?

使用 eval exec 对用户输入可能是最常见的滥用python特性。

要选择列值等于标量的行, some_value 使用 == :

df.loc[df['column_name'] == some_value]

要选择列值在ITerable中的行, some_values 使用 isin :

df.loc[df['column_name'].isin(some_values)]

将多个条件与 & :

df.loc[(df['column_name'] >= A) & (df['column_name'] <= B)]

注意括号。因为巨蟒的 operator precedence rules , & 绑得更紧 <= >= . 因此,最后一个例子中的括号是必要的。没有括号

df['column_name'] >= A & df['column_name'] <= B

被分析为

df['column_name'] >= (A & df['column_name']) <= B

结果是 Truth value of a Series is ambiguous error .


选择其列值的行 不等于 一些价值 使用 != :

df.loc[df['column_name'] != some_value]

伊辛 返回布尔序列,以便选择值为 在里面 一些价值观 ,使用 ~ :

df.loc[~df['column_name'].isin(some_values)]

例如,

import pandas as pd
import numpy as np
df = pd.DataFrame({'A': 'foo bar foo bar foo bar foo foo'.split(),
                   'B': 'one one two three two two one three'.split(),
                   'C': np.arange(8), 'D': np.arange(8) * 2})
print(df)
#      A      B  C   D
# 0  foo    one  0   0
# 1  bar    one  1   2
# 2  foo    two  2   4
# 3  bar  three  3   6
# 4  foo    two  4   8
# 5  bar    two  5  10
# 6  foo    one  6  12
# 7  foo  three  7  14

print(df.loc[df['A'] == 'foo'])

产量

     A      B  C   D
0  foo    one  0   0
2  foo    two  2   4
4  foo    two  4   8
6  foo    one  6  12
7  foo  three  7  14

如果要包含多个值,请将它们放入 列出(或更一般地说,任何一个都可以)并使用 伊辛 :

print(df.loc[df['B'].isin(['one','three'])])

产量

     A      B  C   D
0  foo    one  0   0
1  bar    one  1   2
3  bar  three  3   6
6  foo    one  6  12
7  foo  three  7  14

但是,请注意,如果您希望多次这样做,那么 先做一个索引,然后使用 df.loc :

df = df.set_index(['B'])
print(df.loc['one'])

产量

       A  C   D
B              
one  foo  0   0
one  bar  1   2
one  foo  6  12

或者,要包含索引中的多个值,请使用 df.index.isin :

df.loc[df.index.isin(['one','two'])]

产量

       A  C   D
B              
one  foo  0   0
one  bar  1   2
two  foo  2   4
two  foo  4   8
two  bar  5  10
one  foo  6  12