Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在没有数据的情况下,如何根据月份计算天数?_Python_Pandas - Fatal编程技术网

Python 在没有数据的情况下,如何根据月份计算天数?

Python 在没有数据的情况下,如何根据月份计算天数?,python,pandas,Python,Pandas,我正在写一个脚本,在这个脚本中,我在一个csv中读取多个列和行。我需要脚本为单行合计每列中的值,并返回该行中哪些列的值为零。以下是数据的示例,还有其他几列,但这些是我的问题感兴趣的列: JAN FEB MAR APR MAY JUN JUL AUG SEP OCT NOV DEC 0 0 5 5 0 5 5 5 5 0 0 0 这就是我到目前为止所做的: import pandas as pd import os

我正在写一个脚本,在这个脚本中,我在一个csv中读取多个列和行。我需要脚本为单行合计每列中的值,并返回该行中哪些列的值为零。以下是数据的示例,还有其他几列,但这些是我的问题感兴趣的列:

    JAN FEB MAR APR MAY JUN JUL AUG SEP OCT NOV DEC
     0   0   5   5   0   5   5   5   5   0   0   0
这就是我到目前为止所做的:

    import pandas as pd
    import os

    os.chdir('C:\\users\\vroland\\desktop\\RR_WMD\\WUdata')

    fout=open("WUinput.csv","a")
    #read water use file
    df=pd.read_csv("WUtest.csv")
    #Header & months with zero values
    cols=df.columns
    #Boolean array of columns with zero values
    bt=df.apply(lambda x: x==0)
    #List months with zero values
    zar=bt.apply(lambda x:list(cols[x.values]),axis=1)
我尝试了多种方法,包括
if
语句,但我不断收到一个错误,指出我的条件语句不明确,所以我正在尝试另一种方法。这就是我现在要处理的上面的代码块:

   a=30
   b=31
   c=28
   num_days=pd.DataFrame({'JAN':[b],'FEB':[c],'MAR':[b],'APR':[a],'MAY':[b],
                          'JUN':[a],'JUL':[b],'AUG':[b],'SEP':[a],'OCT':[b],
                          'NOV':[a],'DEC':[b]})

其思想是使用
zar
中返回的值在我的数据框
num_days
中查找适当的日值。返回此值并计算值为零的总天数

好吧,我会去掉“fout”这一行。您似乎没有写入该文件,并且不需要打开该文件即可使用pandas的“read_csv”功能。然后你可以遍历每一行,找出什么是零,什么不是

returnArray = []
i=0
while i < len(df.values):
    j=14 #since user only cares about column 14-26
    while j < len(df.values[i]):
        if df.values[i][j] == 0:
            returnArray.append([i,j])
        j=j+1
    i=i+1
returnArray=[]
i=0
而i
考虑
pd.DataFrame
df

cols = ['JAN', 'FEB', 'MAR', 'APR',
        'MAY', 'JUN', 'JUL', 'AUG',
        'SEP', 'OCT', 'NOV', 'DEC']

df = pd.DataFrame(np.random.randint(0, 3, (10, 12)), columns=cols)
df


我将使用
row==0的每行求值作为列本身的布尔掩码。使用
列表
可以很好地回到
pd.系列

df.eq(0).apply(lambda x: list(df.columns[x]), 1)

0                   [FEB, MAR, APR, NOV]
1                        [FEB, OCT, NOV]
2              [JAN, APR, AUG, NOV, DEC]
3                        [MAR, APR, SEP]
4                   [MAY, JUN, NOV, DEC]
5                        [APR, AUG, NOV]
6         [MAR, APR, JUN, OCT, NOV, DEC]
7    [JAN, FEB, APR, JUL, OCT, NOV, DEC]
8              [MAY, JUL, AUG, SEP, OCT]
9         [FEB, MAR, APR, JUN, AUG, SEP]
dtype: object

获取天数

days_in_month = pd.Series(dict(
        JAN=31, FEB=28, MAR=31,
        APR=30, MAY=31, JUN=30,
        JUL=31, AUG=31, SEP=30,
        OCT=31, NOV=30, DEC=31
    ))

df.eq(0).dot(days_in_month)

0    119
1     89
2    153
3     91
4    122
5     91
6    183
7    212
8    154
9    180
dtype: int64

“我需要脚本将每列中的值合计为一行”这不是意味着你只需要每列中的值吗?是的,我需要每列中的值,我只是想尽量具体,我只是不希望它被解释为我想要对整个列求和,因为每行都是唯一的事件。所以,我想要每列中的值,对非零值求和并返回。接下来,返回带零的列,以便我可以根据月份分配正确的天数。谢谢,这几乎就是我在
zar
中收到的输出。我真的对这些lambda函数很感兴趣,如果我在这里得到这种类型的输出,什么是计算总天数的好方法。谢谢,这是我的下一个问题,我如何操作
df.eq(0).dot(月内天数)
来解释我的矩阵维数不同的事实。在我的dataframe中,我有26列,但我只对这个特定问题中的15-26列感兴趣。我本可以对这一行进行注释,并且应该这样做,我将把所有这些都写到另一个文件中,只需要先让它正常工作。
m_条目
也是
i,j处的
df.值
。我需要定义它来使用它,不想按原样工作。你可以在pythonsorry中
int m_entry
,我在发布之前修改了我的代码,并且没有彻底校对。现在应该更有意义了是的,明白了。在这方面,我对pandas和python是新手,但是使用这个方法,df的所有26列都返回零值,我只对最后12列感兴趣。所以我可以调整
len
只查看第14-26列吗?