-1

I'm trying to "convert" the information of several blocks of dataframe rows 0 to 15 and columns col1 to col 16 into an image (16x16). Between each 16x16 block, I have an empty line as you can see.

I'm reading the dataframe from a .txt file:

df = pd.read_csv('User1/Video1.txt', sep="\s+|\t+|\s+\t+|\t+\s+", header=None, names=headers, engine='python', parse_dates=parse_dates)
                        date arrow  col1  col2  ...  col13  col14  col15  col16
0    2020-11-09 09:53:39.552    ->   0.0   0.0  ...    0.0    0.0    0.0    0.0
1    2020-11-09 09:53:39.552    ->   0.0   2.0  ...    0.0    0.0    0.0    0.0
2    2020-11-09 09:53:39.552    ->   0.0   0.0  ...    0.0    0.0    6.0    6.0
3    2020-11-09 09:53:39.552    ->   0.0   0.0  ...    0.0    0.0    0.0    0.0
4    2020-11-09 09:53:39.586    ->   0.0   9.0  ...    0.0    7.0    0.0    0.0
...
15   2020-11-09 09:53:39.586    ->   0.0   9.0  ...    0.0    7.0    0.0    0.0
16   2020-11-09 09:53:39.586    ->
...                 
1648 2020-11-09 09:54:06.920    ->   4.0   0.0  ...    4.0    4.0    0.0    0.0

I'm capable of reshaping the first 16x16 block: img=np.resize(df.iloc[:16, -16:].to_numpy(), (16, 16, 3)) but I want to iterate over all dataframe and sum all the pixel values of each 16x16 block.

Can you provide any advice?

Sunderam Dubey
  • 1
  • 11
  • 20
  • 40
az_
  • 11
  • 3
  • Please provide a [mcve], as well as the current and expected output. See [How to make good reproducible pandas examples](https://stackoverflow.com/q/20109391). – AMC Nov 09 '20 at 23:19

1 Answers1

0

If you can provide input of the first 32 rows and columns I can test, but try the following code (untested). Essentially, you can just loop through each 16x16 block, get the sum and append to a list:

i = 16
img_list = []
for _ in range(df.shape[0] / 17):
    img = np.resize(df.iloc[i-16:i, -16:].to_numpy(), (16, 16, 3))
    img_sum = img.sum()
    img_list.append(img_sum)
    i += 17 

Edit: I just saw you had one empty line separating blocks. I have update the necessary values to 17.

David Erickson
  • 16,433
  • 2
  • 19
  • 35