Create empty square Dataframe from single column DataFrame - python

I have the following single column DataFrame:
df:
data = {'YEAR': [2020,2021,2022,2023,2024,2025,2026,2027,2028,2029,2030],
}
df = pd.DataFrame(data)
df
How can I create an empty square Dataframe from df like the following DatFrame:
I´m kinda new to Python. I have tried converting the original Dataframme to list and the create a new dataframe from there without success. I also tried to do somekind concatenation but it does not work either.
I guess that its not as hard, but I dont know how to do that.

Try provide both index and columns as Year when creating the data frame:
df = pd.DataFrame([], index=data['YEAR'], columns=data['YEAR'])
df
2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030
2020 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2021 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2022 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2023 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2024 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2025 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2026 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2027 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2028 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2029 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2030 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN

You can also use df.dot and replace:
df.set_index('YEAR').dot(df.set_index('YEAR').T).replace({0:''})

Use reindex:
df.reindex(columns=df.columns.union(df['YEAR']))
Output:
YEAR 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030
0 2020 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
1 2021 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2 2022 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
3 2023 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
4 2024 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
5 2025 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
6 2026 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
7 2027 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
8 2028 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
9 2029 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
10 2030 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN

You can do this by simply using pandas.DataFrame.loc :
df.loc[:, df.set_index("YEAR").index.tolist()]= np.NaN #or ""
# Output :
print(df)
YEAR 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030
0 2020 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
1 2021 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2 2022 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
3 2023 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
4 2024 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
5 2025 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
6 2026 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
7 2027 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
8 2028 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
9 2029 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
10 2030 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN

Related

create dataframe from dictionary of datetime and int

I have datetime and int values dictionary like below.
end_date = datetime.datetime.strptime("01-12-2020", "%d-%m-%Y")
details = {
datetime.datetime.strptime("30-01-2020", "%d-%m-%Y") : 15,
datetime.datetime.strptime("10-10-2020", "%d-%m-%Y") : 10,
datetime.datetime.strptime("11-10-2020", "%d-%m-%Y") : 11.5,
datetime.datetime.strptime("10-11-2020", "%d-%m-%Y") : 20,
datetime.datetime.strptime("12-11-2020", "%d-%m-%Y") : 23.19,
}
I would like to convert this to below pandas dataframe. Where ever data is not available in the dictionary it should fill with null
IUUC, you can create an empty dataframe and loop the details and fill value
import calendar
df = pd.DataFrame(index=range(1, 32), columns=list(calendar.month_abbr)[1:])
for k, v in details.items():
if k < end_date:
df.loc[k.day, k.strftime("%b")] = v
df = df.add_suffix('-20')
print(df)
Jan-20 Feb-20 Mar-20 Apr-20 May-20 Jun-20 Jul-20 Aug-20 Sep-20 Oct-20 Nov-20 Dec-20
1 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
3 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
4 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
5 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
6 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
7 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
8 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
9 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
10 NaN NaN NaN NaN NaN NaN NaN NaN NaN 10 20 NaN
11 NaN NaN NaN NaN NaN NaN NaN NaN NaN 11.5 NaN NaN
12 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 23.19 NaN
13 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
14 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
15 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
16 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
17 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
18 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
19 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
20 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
21 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
22 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
23 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
24 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
25 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
26 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
27 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
28 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
29 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
30 15 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
31 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
Solution:
import pandas as pd
import datetime
df = pd.DataFrame(columns=[y+'_2020' for y in ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec']], index= [x for x in range(1,32)])
month_map={1: 'Jan', 2: 'Feb', 3: 'Mar', 4: 'Apr', 5: 'May', 6: 'Jun', 7: 'Jul', 8: 'Aug', 9: 'Sep', 10: 'Oct', 11: 'Nov', 12: 'Dec'}
details = {
datetime.datetime.strptime("30-01-2020", "%d-%m-%Y") : 15,
datetime.datetime.strptime("10-10-2020", "%d-%m-%Y") : 10,
datetime.datetime.strptime("11-10-2020", "%d-%m-%Y") : 11.5,
datetime.datetime.strptime("10-11-2020", "%d-%m-%Y") : 20,
datetime.datetime.strptime("12-11-2020", "%d-%m-%Y") : 23.19,
}
for k1,v1 in details.items():
df.loc[k1.day, month_map[k1.month] + '_2020']=v1

Problem in removing a list of nan from Pandas dataframe using Python

I have a dataframe which has 4 columns- Name, Size, Text Extracted, Score.
The score column contains a list with nan in it
something like this
[nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan]
Here's how my dataframe looks like
Image Name Image Dimensions Text Extracted score
SGAFIS2457_1_1.jpg (1260, 1585, 3) "[nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan]"
SGAFIS2457_1_2.jpg (1235, 1595, 3) "[nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan]"
SGAFIS2457_2_1.jpg (1402, 1668, 3) FIS GLOBAL SUSTAINABILITY REPORT TABLE OF CONTENTS INTRODUCTION SUSTAINABLE PLANET I LETTER FROM OUR CHAIRMAN AND CEO REDUCING ENVIRONMENTAL IMPACT II ABOUT FIS III REPORT HIGHLIGHTS SUSTAINABLE GOVERNANCE IV APPROACH TO SUSTAINABLE GROWTH V RESPONSE TO COVID GOVERNANCE OVERSIGHT STRUCTURE AND RESOURCES SUSTAINABLE SOCIETIES RISK MANAGEMENT OPERATIONAL RESILIENCY AND COMPLIANCE EMPOWERING INDIVIDUALS AND MANAGING A SUSTAINABLY BUSINESSES IN THE DIGITAL ECONOMY FOCUSED SUPPLY CHAIN PROTECTING OUR CLIENTS AND THE FINANCIAL SYSTEM APPENDIX ADVANCING THE WORKFORCE OF THE FUTURE CONTENT INDEXES FOSTERING INCLUSION DIVERSITY HELPING COMMUNITIES THRIVE INTRODUCTION 0.384155154
/content/keras-retinanet/PDFs/KPI1/Cropped_images/KPI1_SGAFIS2457_7_1.jpg (1105, 865, 3) MATRIX OF MATERIAL TOPICS Local Communities Training and Education Diversity Equal Opportunity Indirect Economic Impacts Ethics and Integrity Employment Data Privacy and Security Governance Customer Privacy Access to Economic Finance Performance Procurement Indirect Energy Economic Impacts Practices Anti Corruption Business Continuity Anti Competitive Behavior Public Policy INCREASING IMPORTANCE INDUSTRY PERSPECTIVES SUSTAINABLE SUSTAINABLE SUSTAINABLE SOCIETIES PLANET GOVERNANCE EXTERNAL STAKEHOLDERS PERSPECTIVES 0.352203667
SGAALDAR DH_44_1.jpg (758, 1147, 3) GRI "[nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan]"
SGAALDAR DH_96_1.jpg (1266, 2316, 3) "[nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan]"
For your reference I'm also attaching a screenshot of the it here
I've tried multiple ways of removing the whole row where the nan in list is present but none of them worked so far. Here's a snippet of code which I tried would solve it but it did not work.
dfKPI = dfKPI[~dfKPI['score'].isin(garb)]
here garb is nothing but the list shared above.
I'm stuck on this problem for a good two days and have researched and tried out multiple things.
From the look of it, it seems that your score column has usually a numerical result, but sometimes has a string containing "[nan nan nan ...]" rather than a list of nan.
One simple way to clean this up (here assuming an original DataFrame called df) is:
df_new = df.assign(score=pd.to_numeric(df['score'], errors='coerce'))
Optionally, you can drop all rows with nan (either resulting from the 'coerce' above, or originally nan):
df_new = (
df
.assign(score=pd.to_numeric(df['score'], errors='coerce'))
.dropna(subset='score')
)

Get lines Pandas with groupby ignoring NaNs

I need to get rows in my dataframe (using .last_valid_index()), but some of the indices which satisfy the condition are NaN (that's fine, as I may have some empty blocks between the cuts).
df.groupby('cuts').apply(lambda x: x.q1.last_valid_index())
Out[289]:
cuts
(2016-04-29 23:59:59.999999999, 2016-05-14] 13.0
(2016-05-14, 2016-05-28] 19.0
(2016-05-28, 2016-06-11] NaN
(2016-06-11, 2016-06-25] NaN
(2016-06-25, 2016-07-09] NaN
(2016-07-09, 2016-07-23] 75.0
(2016-07-23, 2016-08-06] NaN
(2016-08-06, 2016-08-20] NaN
(2016-08-20, 2016-09-03] NaN
(2016-09-03, 2016-09-17] 138.0
(2016-09-17, 2016-10-01] NaN
(2016-10-01, 2016-10-15] 156.0
(2016-10-15, 2016-10-29] NaN
I need to get rid of NaNs, I tried something like:
df.groupby('cuts').apply(lambda x: x.loc[x.q1.last_valid_index()] if (x.q1.last_valid_index() > 0)
but it didn't work.
I'm sure it should be very simple, but I'm struggling to find a neat solution.
EDIT
df[:50]
Out[305]:
response_date q1 crp ferritin hb q2 plasma platelets transferrin q3 wcc value a1 a2 a3 a4
0 2016-04-27 34.0 6.1 15.3 136.0 NaN 1.0 404.0 27.0 NaN 9.33 NaN NaN NaN NaN NaN
1 2016-04-30 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 12.0 0.98 80.0 1.0
2 2016-05-01 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 1089.0 NaN NaN NaN NaN
3 2016-05-02 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
4 2016-05-03 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
5 2016-05-04 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
6 2016-05-05 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
7 2016-05-06 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
8 2016-05-07 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
9 2016-05-08 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
10 2016-05-09 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
11 2016-05-10 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
12 2016-05-11 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
13 2016-05-12 38.0 1.1 11.1 135.0 4.0 1.0 382.0 18.0 5.0 10.60 NaN NaN NaN NaN NaN
14 2016-05-13 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
15 2016-05-14 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 12.0 0.83 80.0 1.0
16 2016-05-15 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
17 2016-05-16 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
18 2016-05-17 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
19 2016-05-18 36.0 8.8 15.6 138.0 NaN NaN 369.0 23.0 NaN 9.78 NaN NaN NaN NaN NaN
20 2016-05-19 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
21 2016-05-20 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
22 2016-05-21 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
23 2016-05-22 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
24 2016-05-23 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
25 2016-05-24 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
26 2016-05-25 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
27 2016-05-26 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
28 2016-05-27 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
29 2016-05-28 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 14.0 1.60 80.0 1.0
30 2016-05-29 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
31 2016-05-30 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
32 2016-05-31 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
33 2016-06-01 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
34 2016-06-02 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 802.0 NaN NaN NaN NaN
35 2016-06-03 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
36 2016-06-04 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
37 2016-06-05 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
38 2016-06-06 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
39 2016-06-07 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
40 2016-06-08 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
41 2016-06-09 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
42 2016-06-10 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
43 2016-06-11 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 13.0 1.40 75.0 1.0
44 2016-06-12 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
45 2016-06-13 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
46 2016-06-14 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
47 2016-06-15 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
48 2016-06-16 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
49 2016-06-17 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
I need to extract data (blood results) between the dates of a1. I'm usind pd.cut, to get blocks between the dates of a1. If you notice, within some block of a1, there are not blood results, so this is how I got NaN previously. I need to get only rows with bloods between the dates of a1. However, there are might be more than one set of bloods between the dates, so this is why I'm taking the last set of results, which is closer to the end of the a1 block.

Complete the index and columns in pandas(DataFrame)?

Here is a datafrmae.
a = pd.DataFrame({'a':np.arange(10)}, index=np.arange(0,20,2))
# then I can create new dataframe and complete the index.
b = pd.DataFrame(index=np.arange(20))
b['a'] = a
# Now convert the index np.arange(0,20,2) to np.arange(20). Fill noexists value by np.nan.
But how can i do the same way to column? Suppose the column's dtype is int32 and names is np.arange(0,20,2).
It seems you need reindex:
print (a.reindex(b.index))
a
0 0.0
1 NaN
2 1.0
3 NaN
4 2.0
5 NaN
6 3.0
7 NaN
8 4.0
9 NaN
10 5.0
11 NaN
12 6.0
13 NaN
14 7.0
15 NaN
16 8.0
17 NaN
18 9.0
19 NaN
Also can reindex columns:
a.columns = [0]
print (a.reindex(index=b.index, columns=np.arange(0,20,2)))
0 2 4 6 8 10 12 14 16 18
0 0.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN
1 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2 1.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN
3 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
4 2.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN
5 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
6 3.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN
7 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
8 4.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN
9 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
10 5.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN
11 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
12 6.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN
13 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
14 7.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN
15 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
16 8.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN
17 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
18 9.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN
19 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN

Get daily averages of monthly database

I have a long list of data structured in the following way
Date, Time, Temperature, Moisture, Accumulated precipitation
1/01/2011, 00:00, 23, 50, 2,
1/01/2011, 00:15, 22, 45, 1,
1/01/2011, 00:30, 20, 39, 0,
1/01/2011, 01:00, 25, 34, 0,
1/01/2011, 01:15, 23, 50, 0,
.
.
.
.
1/01/2011, 23:45, 22, 40, 0,
.
.
.
.
31/01/2011, 00:00, 23, 45, 0,
How I can get the daily averages of the variables Temperature and Moisture for the 31st day of the month?
This is the sort of thing that the pandas library is good at. The basic idea is that you can read data into objects called DataFrames, kind of like an Excel sheet, and then you can do neat things to them. Starting from a temps.csv file I made up to look like yours:
>>> df = pd.read_csv("temps.csv", index_col=False, parse_dates=[[0,1]], skipinitialspace=True)
>>> df = df.rename(columns={"Date _Time": "Time"})
>>> df = df.set_index("Time")
>>> df
Temperature Moisture Accumulated precipitation
Time
2011-01-01 00:00:00 23 50 2
2011-01-01 00:15:00 22 45 1
2011-01-01 00:30:00 20 39 0
2011-01-01 01:00:00 25 34 0
2011-01-01 01:15:00 23 50 0
2011-01-01 23:45:00 22 40 0
2011-01-02 00:00:00 123 250 32
2011-01-02 00:15:00 122 245 31
2011-01-02 00:30:00 120 239 30
2011-01-02 01:00:00 125 234 30
2011-01-02 01:15:00 123 250 30
2011-01-02 23:45:00 122 240 30
Once we have the frame in a nice shape, we can easily resample (the default is the mean):
>>> df.resample("D")
Temperature Moisture Accumulated precipitation
Time
2011-01-01 22.5 43 0.5
2011-01-02 122.5 243 30.5
Or get the max or min:
>>> df.resample("D", how="max")
Temperature Moisture Accumulated precipitation
Time
2011-01-01 25 50 2
2011-01-02 125 250 32
>>> df.resample("D", how="min")
Temperature Moisture Accumulated precipitation
Time
2011-01-01 20 34 0
2011-01-02 120 234 30
Et cetera. Note that this is just the brute average of the recorded data points each day: if you want to resample differently to account for the different distance between measurements, that's easy too. If you're going to be doing data processing in Python, it's definitely worth reading through the 10 minute overview to see if it might be helpful.
Use the suggestions on a different database, I did as follows:
df = pd.read_csv('path-tracks.csv', index_col= 'Date', parse_dates=[0])
df
Lat Lon ID Moisture Temperature Category
Date
2004-02-05 06:45:00 19.7 -95.2 1 45 -38 CCM
2004-02-05 07:45:00 19.7 -94.7 1 34 -48 CCM
2004-02-05 08:45:00 19.3 -93.9 1 57 -60 CCM
2004-02-05 09:45:00 19.0 -93.5 1 89 -58 CCM
2004-02-05 10:45:00 19.0 -92.8 1 34 -50 CCM
2004-02-05 11:45:00 19.2 -92.6 1 23 -40 CCM
2004-02-05 12:45:00 19.9 -93.0 1 10 -43 CCM
2004-02-05 13:15:00 20.0 -92.8 1 50 -32 CCM
2004-05-30 04:45:00 23.1 -100.2 2 45 -45 SCME
2004-05-30 05:45:00 23.2 -100.0 2 68 -56 SCME
2004-05-30 06:45:00 23.3 -100.0 2 90 -48 SCME
2004-05-30 07:45:00 23.3 -100.2 2 100 -32 SCME
2004-05-31 03:15:00 23.4 -99.0 3 12 -36 SCM
2004-05-31 04:15:00 23.5 -98.9 3 34 -46 SCM
2004-05-31 05:15:00 23.6 -98.7 3 56 -68 SCM
2004-05-31 06:15:00 23.7 -98.8 3 78 -30 SCM
Now try to get the daily sum as follows:
df.resample('D',how='sum')
i get the following:
Lat Lon ID Moisture Temperature
Date
2004-02-06 155.8 -748.5 8 342 -369
2004-02-07 NaN NaN NaN NaN NaN
2004-02-08 NaN NaN NaN NaN NaN
2004-02-09 NaN NaN NaN NaN NaN
2004-02-10 NaN NaN NaN NaN NaN
2004-02-11 NaN NaN NaN NaN NaN
2004-02-12 NaN NaN NaN NaN NaN
2004-02-13 NaN NaN NaN NaN NaN
2004-02-14 NaN NaN NaN NaN NaN
2004-02-15 NaN NaN NaN NaN NaN
2004-02-16 NaN NaN NaN NaN NaN
2004-02-17 NaN NaN NaN NaN NaN
2004-02-18 NaN NaN NaN NaN NaN
2004-02-19 NaN NaN NaN NaN NaN
2004-02-20 NaN NaN NaN NaN NaN
2004-02-21 NaN NaN NaN NaN NaN
2004-02-22 NaN NaN NaN NaN NaN
2004-02-23 NaN NaN NaN NaN NaN
2004-02-24 NaN NaN NaN NaN NaN
2004-02-25 NaN NaN NaN NaN NaN
2004-02-26 NaN NaN NaN NaN NaN
2004-02-27 NaN NaN NaN NaN NaN
2004-02-28 NaN NaN NaN NaN NaN
2004-02-29 NaN NaN NaN NaN NaN
2004-03-01 NaN NaN NaN NaN NaN
2004-03-02 NaN NaN NaN NaN NaN
2004-03-03 NaN NaN NaN NaN NaN
2004-03-04 NaN NaN NaN NaN NaN
2004-03-05 NaN NaN NaN NaN NaN
2004-03-06 NaN NaN NaN NaN NaN
2004-03-07 NaN NaN NaN NaN NaN
2004-03-08 NaN NaN NaN NaN NaN
2004-03-09 NaN NaN NaN NaN NaN
2004-03-10 NaN NaN NaN NaN NaN
2004-03-11 NaN NaN NaN NaN NaN
2004-03-12 NaN NaN NaN NaN NaN
2004-03-13 NaN NaN NaN NaN NaN
2004-03-14 NaN NaN NaN NaN NaN
2004-03-15 NaN NaN NaN NaN NaN
2004-03-16 NaN NaN NaN NaN NaN
2004-03-17 NaN NaN NaN NaN NaN
2004-03-18 NaN NaN NaN NaN NaN
2004-03-19 NaN NaN NaN NaN NaN
2004-03-20 NaN NaN NaN NaN NaN
2004-03-21 NaN NaN NaN NaN NaN
2004-03-22 NaN NaN NaN NaN NaN
2004-03-23 NaN NaN NaN NaN NaN
2004-03-24 NaN NaN NaN NaN NaN
2004-03-25 NaN NaN NaN NaN NaN
2004-03-26 NaN NaN NaN NaN NaN
2004-03-27 NaN NaN NaN NaN NaN
2004-03-28 NaN NaN NaN NaN NaN
2004-03-29 NaN NaN NaN NaN NaN
2004-03-30 NaN NaN NaN NaN NaN
2004-03-31 NaN NaN NaN NaN NaN
2004-04-01 NaN NaN NaN NaN NaN
2004-04-02 NaN NaN NaN NaN NaN
2004-04-03 NaN NaN NaN NaN NaN
2004-04-04 NaN NaN NaN NaN NaN
2004-04-05 NaN NaN NaN NaN NaN
2004-04-06 NaN NaN NaN NaN NaN
2004-04-07 NaN NaN NaN NaN NaN
2004-04-08 NaN NaN NaN NaN NaN
2004-04-09 NaN NaN NaN NaN NaN
2004-04-10 NaN NaN NaN NaN NaN
2004-04-11 NaN NaN NaN NaN NaN
2004-04-12 NaN NaN NaN NaN NaN
2004-04-13 NaN NaN NaN NaN NaN
2004-04-14 NaN NaN NaN NaN NaN
2004-04-15 NaN NaN NaN NaN NaN
2004-04-16 NaN NaN NaN NaN NaN
2004-04-17 NaN NaN NaN NaN NaN
2004-04-18 NaN NaN NaN NaN NaN
2004-04-19 NaN NaN NaN NaN NaN
2004-04-20 NaN NaN NaN NaN NaN
2004-04-21 NaN NaN NaN NaN NaN
2004-04-22 NaN NaN NaN NaN NaN
2004-04-23 NaN NaN NaN NaN NaN
2004-04-24 NaN NaN NaN NaN NaN
2004-04-25 NaN NaN NaN NaN NaN
2004-04-26 NaN NaN NaN NaN NaN
2004-04-27 NaN NaN NaN NaN NaN
2004-04-28 NaN NaN NaN NaN NaN
2004-04-29 NaN NaN NaN NaN NaN
2004-04-30 NaN NaN NaN NaN NaN
2004-05-01 NaN NaN NaN NaN NaN
2004-05-02 NaN NaN NaN NaN NaN
2004-05-03 NaN NaN NaN NaN NaN
2004-05-04 NaN NaN NaN NaN NaN
2004-05-05 NaN NaN NaN NaN NaN
2004-05-06 NaN NaN NaN NaN NaN
2004-05-07 NaN NaN NaN NaN NaN
2004-05-08 NaN NaN NaN NaN NaN
2004-05-09 NaN NaN NaN NaN NaN
2004-05-10 NaN NaN NaN NaN NaN
2004-05-11 NaN NaN NaN NaN NaN
2004-05-12 NaN NaN NaN NaN NaN
2004-05-13 NaN NaN NaN NaN NaN
2004-05-14 NaN NaN NaN NaN NaN
2004-05-15 NaN NaN NaN NaN NaN
2004-05-16 NaN NaN NaN NaN NaN
2004-05-17 NaN NaN NaN NaN NaN
2004-05-18 NaN NaN NaN NaN NaN
2004-05-19 NaN NaN NaN NaN NaN
2004-05-20 NaN NaN NaN NaN NaN
2004-05-21 NaN NaN NaN NaN NaN
2004-05-22 NaN NaN NaN NaN NaN
2004-05-23 NaN NaN NaN NaN NaN
2004-05-24 NaN NaN NaN NaN NaN
2004-05-25 NaN NaN NaN NaN NaN
2004-05-26 NaN NaN NaN NaN NaN
2004-05-27 NaN NaN NaN NaN NaN
2004-05-28 NaN NaN NaN NaN NaN
2004-05-29 NaN NaN NaN NaN NaN
2004-05-30 NaN NaN NaN NaN NaN
2004-05-31 92.9 -400.4 8 303 -181
2004-06-01 94.2 -395.4 12 180 -180
I did something wrong? because it no takes into account the date 2004-02-05 6:45:00? How do I fix this error?

Categories