If you don't want to use the GPIO pins, your only other options are Ethernet or USB. If your Arduino supported Ethernet, you probably wouldn't be asking.
Some of the Arduinos, including the Leonardo, Micro, and Flora, can act as USB devices, and pretend to be something like a keyboard or mouse. If you have one that has this feature, you could just have the Arduino "type" the data to a terminal on the Pi. Have it log in at boot up (after waiting for the pi to boot,) run your data collection script, and just start entering data, which the script can then use every time your Arduino sends an enter character. You'll need to check out the tutorials on using it. There are plenty of examples out there even though it's a relatively new feature.
If neither of these work for you, you'll be using GPIO. Probably the I2C bus is a good solution, as josar mentioned, but that will require the use of pins on the GPIO header. I'm not sure of your reasoning for avoiding GPIO, but I'm assuming you're averse to using any pins on the header; not just the general purpose ones.